Redis学习系列(二)——原理

取法乎上得乎中
取法乎中得乎下
我们从以下几个方面一起讨论学习Redis,更好的理解他。

1、redis数据是基于内存

Redis 将数据储存在内存里面,读写数据的时候都不会受到硬盘 I/O 速度的限制,所以速度极快。
数据库的工作模式按存储方式可分为:硬盘数据库和内存数据库
硬盘数据库:
在这里插入图片描述
内存数据库:
在这里插入图片描述

2、redis是单线程——Redis处理网络请求的时候只有一个线程

它所有的数据都在内存中,所有的运算都是内存级别的运算(纳秒),而且单线程避免了多线程的切换(上下文切换)性能损耗问题。正因为 Redis 是单线程,所以要小心使用 Redis 指令,对于那些耗时的指令(比如keys),一定要谨慎使用,一不小心就可能会导致 Redis 卡顿。
Redis 单线程如何处理那么多的并发客户端连接
Redis的IO多路复用:redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放到文件事件分派器,事件分派器将事件分发给事件处理器。
Nginx也是采用IO多路复用原理解决C10K问题。

3、多路I/O复用模型,非阻塞IO

为什么 Redis 中要使用 I/O 多路复用这种技术呢?
首先,Redis 是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以 I/O 操作在一般情况下往往不能直接返回,这会导致某一文件的 I/O 阻塞导致整个进程无法对其它客户提供服务,而 I/O 多路复用就是为了解决这个问题而出现的。
什么是多路IO复用 学习IO多路复用

多路I/O复用模型是利用 select、poll、epoll效率(epoll高于poll,poll高于select) 可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。
Redis使用的epoll来实现的多路复用,加上Redis自身的事件处理模型将epoll中的连接,读写,关闭都转换为了事件,不在I/O上浪费过多的时间。

什么是非阻塞

非阻塞之前先要了解,阻塞&非阻塞,同步异步的概念,我们都对这几个的理解都比较模糊,认为都差不多,确实差不多,但是不一样。下面我们先了解一下这两者之间的关系。
同步&异步: 关注的是去处理事件机制,
阻塞&非阻塞:关注的是等待事件时的状态。

举例说明:
同步非阻塞
当一个线程触发一个事件A时,没有等待事件A完成,就去做事件B,当事件A完成后,还是这个线程去接受事件A返回值。
异步非阻塞
当一个线程触发一个事件A时,没有等待事件A完成,就去做事件B,当事件A完成后,另一个线程去接受事件A返回值。
同步阻塞
当一个线程触发一个事件A时,等待事件A完成,当事件A完成后,接受事件A返回值。
异步阻塞
基本不出现,相互矛盾。
明白同步&异步,阻塞&非阻塞是对事件关注的点不同。表示的也不同
我们知道了非阻塞是,该线程触发事件后,不会等待事件的状态。

4、缓存淘汰策略

大家都知道,redis存储的数据都在内存中,要是一直向redis中放入数据,当数据的存储量等于服务器的内存怎么办,会不会宕机。那当然不会,他的存储大小也不会去等于服务器内存,redis 的配置文件是对存储的大小有设置,当存储的内存等于设置的带大小,就会触发淘汰策略。根据判断被存储的时间,离目前最远的数据优先被淘汰;判断最近被使用的时间,目前最远的数据优先被淘汰;按设置的时间去淘汰。等等。

  1. noeviction:达到内存限额后返回错误,客户尝试可以导致更多内存使用的命令(大部分写命令,但DEL和一些例外)
  2. allkeys-lru:为了给新增加的数据腾出空间,驱逐键先试图移除一部分最近使用较少的(LRC)。
  3. volatile-lru:为了给新增加的数据腾出空间,驱逐键先试图移除一部分最近使用较少的(LRC),但只限于过期设置键。
  4. allkeys-random: 为了给新增加的数据腾出空间,驱逐任意键
  5. volatile-random: 为了给新增加的数据腾出空间,驱逐任意键,但只限于有过期设置的驱逐键。
  6. volatile-ttl: 为了给新增加的数据腾出空间,驱逐键只有秘钥过期设置,并且首先尝试缩短存活时间的驱逐键

5、持久化

RDB持久化
备份数据
使用SAVE命令创建当前数据库的备份。
它将在Redis目录中创建dump.rdb文件。
还原数据
还原Redis数据
查找Redis的安装目录,使用Redis的CONFIG命令
将Redis备份文件(dump.rdb)移动到Redis目录中并启动服务器以恢复Redis数据。
BGSAVE命令
BGSAVE是创建Redis备份的备用命令。
此命令将启动备份过程并在后台运行。
AOS持久化
不常用,没有RDB效率高

未完待续~~~~~~~~~~~~~


参考文章

  1. https://www.redis.net.cn
  2. https://www.jianshu.com/p/4e6b7809e10a
  3. https://blog.csdn.net/chenyao1994/article/details/79491337
  4. https://blog.csdn.net/weixin_43184769/article/details/91345563#commentBox
  5. https://juejin.im/post/583d11bd128fe1006bf0ec0f
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值