Redis初识

Redis是什么

Redis是一个在内存中存储数据的中间件,它可以用于作为数据库,用于作为数据的缓存,市面上作为数据缓存的不止Redis一家,但为啥我们要学习Redis呢?因为Redis有一些特性和优点,让Reids在市面上脱颖而出被很多公司使用。

Redis的特性

1.  在内存中存储数据

MySQL主要通过"表"的方式来存储组织数据的"关系型数据库",而Redis主要是通过"键值对"的方式来组织存储数据的"非关系型数据库"。

2.可编程的

针对Redis的操作,我们既可以通过命令的方式进行操作,比如Xshell的命令行,也可以通过一些脚本的方式,批量执行一些操作(可以带有一些逻辑)。

3.扩展性强

我们可以在Redis原有的基础功能上再进行扩展,Redis提供了API,我们可以通过C/C++,Java或者Rust编写扩展,本质上就是一个动态链接库。比如windows上的dll就是动态链接库,linux上的.so也是动态链接库,可以让exe去调用里面的代码。

Redis已经提供了很多的数据结构和命令,通过扩展,我们可以让Redis支持更多的数据结构,以及提供更多的命令。

4.持久化

Redis是把数据存储在内存上的,因此可以保证数据快速被访问,但是内存上的数据是易失的,程序退出或者系统重启内存上的数据就没了,因此Redis会把数据往硬盘也存一份,其中内存为主,硬盘为辅。针对数据的增删改查都是在内存上操作,而硬盘相当于对内存的数据进行了备份,当Redis重启之后,就会在重启时加载硬盘中的备份数据,使Redis的内存数据恢复到重启前的状态。

5.水平扩展

水平扩展类似于分库分表,一个Redis能存储的数据是有限的,毕竟内存空间有限,如果我们要存储很多数据可以引入多个主机,部署多个Redis节点,每个Redis存储数据的一部分。

6.高可用

高可用也可以叫做冗余或者备份,Redis自身也支持"主从"结构的,如果主节点挂了,从节点可以补上,这个过程是可以自动完成的,主节点一挂,从节点自动就顶上成为主节点了,用户是感知不到的,可以保证系统的可用性更高。

7.快

Redis最重要的一个特性就是快,天下武功,唯快不破。

为啥Redis快?其实理由很简单,

原因一:Redis数据在内存中,就比访问硬盘数据库要快很多。冯诺依曼体系结构告诉我们,CPU访问内存的数据是比访问外设更快的。

原因二:Redis核心功能都是比较简单的逻辑,关系型数据库要考虑的更多,各种约束啥的,而Redis没有拖泥带水的功能,核心功能都是操作简单的内存数据结构。

原因三:从网络角度上,Redis使用了IO多路复用的方式(epoll),这里多说一句,多路复用是使用一个线程管理多个socket。

原因四:Redis使用的是单线程模型(虽然更高版本的Redis引入了多线程),这样的单线程模型,减少了不必要的线程之间的竞争开销。

在我们的理解中,线程越多不是效率就越高吗?但其实不然,多线程提供效率的前提是,CPU处理密集型的任务,使用多个线程可以充分的利用CPU多核资源。但是对于Redis来说,它的核心任务主要就是操作内存的数据结构,这样的操作是比较快速比较直接的,它不会吃很多CPU,对于Redis来说,引入多线程还需要考虑多线程的加锁,数据竞争问题,就反而会影响效率。

Redis应用场景

1.实时的数据存储

说人话就是把Redis当做数据库,只不过这个数据库不是按照关系型的表方式存储,而是键值对的方式,常用于对于效率的要求比较高的场景。

大多数情况下我们考虑的是存储数据的容量要"大",但也有写常见要考虑的是"快",比如说搜索引擎对于性能效率的要求就是非常高的,如果搜索引擎使用MySQL就会比较慢,因此就可以使用Redis内存级数据库来完成把需要搜索的数据存储在内存中。

当然,使用这样的内存数据库存储大量的数据,需要不少硬件资源。

Redis作为数据库存的是全量数据,那么这里的数据是不能随便丢的。

2.作为缓存

我们使用MySQL存数据大,但是慢,我们有没有办法让它又大又快,很多场景都是遵循二八原则的,我们可以把热点数据拎出来存储在Redis中,20%的热点数据可以满足80%的请求,我们只用在Redis上存储这20%的数据,让大部分的请求直接读取Redis,避免直接访问数据库,这样速度就上去了,如果请求的数据Redis上不存在,再去访问数据库,这样整体的返回时间会更快。

Redis只是作为缓存辅助MySQL,即使Redis数据没了,也可以从MySQL这边加载回来。

3.存储会话

我们知道HTTP协议是没有记忆的功能的,但是我们每次登录CSDN和bilibili的时候都能识别到用户,没有每次都让我们登录,这是由于通过cookie技术保存了会话。

cookie可以实现用户身份信息的保存,但它需要session配合,这里session才在服务器这里真正存储了用户数据,而cookie只是在浏览器这边存储了一个用户的身份标识sessionid,sessionid和session配合起来实现用户身份识别,之前session是存储在应用服务器上的,但是现在引入了负载均衡之后情况就不一样的。它的工作机制是这样的。

当我们客户端进行登录操作之后,会在客户端生成一个cookie,cookie里面生成了一个sessionid,服务端就会生成一个sesssion(会话),如果只有一个服务端,那么直接通过sessionid找到对应的会话即可,但现在是负载均衡,负载均衡是采用轮询的方式调度的,可能会把这个消息发送给不同的服务器,而这个服务器很可能不是我们注册会话的服务器,此时就会找不到,难道我们要一直登录吗?这显然是不合理的。

如何解决上述问题呢?

想办法让负载均衡器把同一个用户的请求始终打到同一个服务器上

那么怎么实现呢?我们可以把会话数据单独拎出来,放到一组独立的机器上(Redis)。当是登录数据的时候直接去会话服务器上。

4.消息队列

此处的消息队列,不是Linux进程间通信的那个消息队列,而是一个消息队列的服务器,基于这个服务器可以实现一个网络版本的生产者消费者模型。

对于分布式系统来说,服务器和服务器之间有时候也需要使用到生产者消费者模型。

Redis也提供了消息队列的功能,Redis的初衷是作为消息队列的,但是它的消息队列功能用到的是很少的,反而是它的存储功能。

如果当前的场景中对于消息队列的功能依赖不是很多,并且我们也不想引入额外的依赖,Redis可以作为一个选择。

Redis不能做的事情

存储大规模数据

Redis是使用内存存储数据的,如果用内存存储大规模数据,需要的硬件成本是很高的,相比之下还是使用硬盘比较划算,不差钱除外。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/25155.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek今日连开3源!针对优化的并行策略,梁文锋本人参与开发

DeepSeek开源周第四天,直接痛快「1日3连发」,且全都围绕一个主题: 优化并行策略。 DualPipe:一种创新的双向流水线并行算法,能够完全重叠前向和后向计算-通信阶段,并减少“流水线气泡”。它通过对称的微批…

打印九九乘法表

打印九九乘法表 package struct; ​ public class ForDemo04 {public static void main(String[] args) { ​for (int i 1; i < 9; i) {//System.out.println(1"*"i""(1*i));for (int j 1; j < i; j) {System.out.print(i"*"j"&qu…

机器学习的起点:线性回归Linear Regression

机器学习的起点&#xff1a;线性回归Linear Regression 作为机器学习的起点&#xff0c;线性回归是理解算法逻辑的绝佳入口。我们从定义、评估方法、应用场景到局限性&#xff0c;用生活化的案例和数学直觉为你构建知识框架。 回归算法 一、线性回归的定义与核心原理 定义&a…

DeepSeek 提示词:常见指令类型

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

查询NFT图片地址

前言 有人给我发了nft&#xff0c;但是没有图片&#xff0c;我就很纳闷为什么&#xff0c;所以想一探究竟 解决思路 先说下环境吧 Sepolia 测试网 metamask钱包 需要获取nft的合约地址和token id 钱包内 nft可以查得到 思路&#xff1a; 我的理解就是ERC721有标准的…

一个滑块可变色的Seekbar

因项目需要&#xff0c;做一个如下图的滑动条&#xff0c;要求如下&#xff1a; 1、滑块跟着进度条改变颜色 2、滑块有白色边和内部颜色组成 大体思路&#xff0c;就是背景需要UI按照需求提供&#xff0c;然后变色时&#xff0c;根据滑动回调动态设置对应的颜色。 直接上代码…

重大更新!锂电池剩余寿命预测新增 CALCE 数据集

往期精彩内容&#xff1a; 单步预测-风速预测模型代码全家桶-CSDN博客 半天入门&#xff01;锂电池剩余寿命预测&#xff08;Python&#xff09;-CSDN博客 超强预测模型&#xff1a;二次分解-组合预测-CSDN博客 VMD CEEMDAN 二次分解&#xff0c;BiLSTM-Attention预测模型…

实时时钟(RTC)/日历芯片PCF8563的I2C读写驱动(2):功能介绍

0 参考资料 PCF8563数据手册&#xff08;第 11 版——2015 年 10 月 26 日&#xff09;.pdf 1 功能介绍 1.1 实时时钟&#xff08;RTC&#xff09;/日历 &#xff08;1&#xff09;PCF8563支持实时时钟&#xff08;RTC&#xff09;&#xff0c;提供时、分、秒信息。对应寄存器…

Xcode如何高效的一键重命名某个关键字

1.选中某个需要修改的关键字&#xff1b; 2.右击&#xff0c;选择Refactor->Rename… 然后就会出现如下界面&#xff1a; 此时就可以一键重命名了。 还可以设置快捷键。 1.打开Settings 2.找到Key Bindings 3.搜索rename 4.出现三个&#xff0c;点击一个地方设置后其…

Grok 3 的崛起:AI 的新时代

AI 领域再次震动&#xff0c;一款全新的深度思考大型语言模型正式亮相。它不仅碾压了现有的各项基准测试&#xff0c;还成功登顶 LM Marina 排行榜&#xff0c;夺得第一名。这款 AI 不是别人&#xff0c;正是埃隆马斯克那款“基于事实、敢言无忌”的 Grok 3——一个号称既极为聪…

ros安装rqt_joint_trajectory_controller

有时候&#xff0c;我们可以看到别人的代码里面有这个&#xff0c;但是这个是需要安装的。 <node name"gui_controller" pkg"rqt_joint_trajectory_controller" type"rqt_joint_trajectory_controller" />sudo apt-get install ros-noeti…

ARM Linux LCD上实时预览摄像头画面

文章目录 1、前言2、环境介绍3、步骤4、应用程序编写4.1、lcd初始化4.2、摄像头初始化4.3、jpeg解码4.4、开启摄像头4.5、完整的程序如下 5、测试5.1、编译应用程序5.2、运行应用程序 6、总结 1、前言 本次应用程序主要针对支持MJPEG格式输出的UVC摄像头。 2、环境介绍 rk35…

是德科技keysight N5173B信号发生器,是一款经济高效的仪器

是德科技keysight N5173B信号发生器安捷伦N5173B信号源 是德N5173B微波模拟信号发生器&#xff0c;拥有 9 kHz 至 40 GHz 的频率覆盖范围&#xff0c;N5173B为宽带滤波器、放大器、接收机等器件的参数测试提供了必要的信号&#xff0c;是一款经济高效的仪器。 N5173B特点&…

【Redis】在Java中以及Spring环境下操作Redis

Java环境下&#xff1a; 1.创建maven 项目 2.导入依赖 <!-- redis --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.3.2</version></dependency> 此处使用的是Jedis&…

registry 容器镜像测试

registry 封装容器部署环境测试 封装打包镜像 dockerfile # 阶段 1&#xff1a;构建阶段&#xff08;使用多阶段构建以减少最终镜像大小&#xff09; FROM golang:1.22-alpine AS builder # 安装构建所需工具 RUN #apk add --no-cache git # 设置工作目录 WORKDIR /app # 将…

Python视频网站(Django框架)

有需要请加文章底部Q哦 可远程调试 Python视频网站(Django框架) 一 介绍 此Python视频网站基于Django框架开发&#xff0c;数据库mysql&#xff0c;前端jquery.js。系统角色分为用户和管理员。 技术栈:Python3(Django框架)MySQLjquery.jsPyCharmnavicat 二 功能 用户 1 注册…

多元数据直观表示(R语言)

一、实验目的&#xff1a; 通过上机试验&#xff0c;掌握R语言实施数据预处理及简单统计分析中的一些基本运算技巧与分析方法&#xff0c;进一步加深对R语言简单统计分析与图形展示的理解。 二、实验内容&#xff1a; bank.csv文件中数据来自1969-1971年美国一家银行的474名职…

在MacOS上打造本地部署的大模型知识库(一)

一、在MacOS上安装Ollama docker run -d -p 3000:8080 --add-hosthost.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main 最后停掉Docker的ollama&#xff0c;就能在webui中加载llama模…

Fiddler在Windows下抓包Https

文章目录 1.Fiddler Classic 配置2.配置浏览器代理自动代理手动配置浏览器代理 3.抓取移动端 HTTPS 流量&#xff08;可选&#xff09;解决抓取 HTTPS 失败问题1.Fiddler证书过期了 默认情况下&#xff0c;Fiddler 无法直接解密 HTTPS 流量。需要开启 HTTPS 解密&#xff1a; 1…

常用的AI文本大语言模型汇总

AI文本【大语言模型】 1、文心一言https://yiyan.baidu.com/ 2、海螺问问https://hailuoai.com/ 3、通义千问https://tongyi.aliyun.com/qianwen/ 4、KimiChat https://kimi.moonshot.cn/ 5、ChatGPThttps://chatgpt.com/ 6、魔塔GPT https://www.modelscope.cn/studios/iic…