1.时效性数据
Redis是一种内存级数据库,所有数据都存放在内存中,内存中的数据可以通过TTL获取其状态。
TTL的返回值存在三种情况:
正数:代表该数据在内存中存活的时间
-1:永久有效地数据
2:已经过期/已经被删除/未被定义的数据
问:在Redis中,时效性数据如何存储的?
答:如图:

过期数据是一块独立的存储空间,Hash结构,field的内存地址,value是过期时间,保存了所有key的过期描述。
2.数据删除策略
数据删除策略是针对时效性数据的处理策略,处理的策略有三种:定时删除、惰性删除、定期删除
定时删除:创建一个定时器,当key设置有过期时间。且时间已经到达过期时间,有定时器立即执行对键的删除操作。
优缺点:可以立即删除过期数据,节约内存空间,但是监控时间的定时器对CPU占用很大
惰性删除:数据到达过期时间我们不做处理,当访问到这个数据时分两种情况:
①若这个数据没有过期,则返回这个数据
②这个数据过期了,则删除这个数据,返回不存在
优缺点:数据过期没有做任何处理,一旦堆积起来对内存压力极大,但是对CPU占用极小
定期删除:定期删除就是周期性轮询redis库中的时效性数据,采用随机抽取的策略,利用过期数据占比的方式控制删除的频率。简言之:周期性的抽查存储空间(随机抽查,重点抽查)
优点:内存定期随机清理,每秒花固定的CPU资源维护内存
总结:在平时我们一般都是结合定期删除和惰性删除来维护内存
3.数据淘汰策略
数据删除策略是针对过期的时效性数据进行删除的策略,而数据淘汰淘汰策略则解决的是当前内存不足导致的问题,对内存的数据进行清理。
数据删除策略一共是3类8种:
第一类:检测易失数据(可能过期的数据集)
volatile-lru:挑选长时间未使用的数据淘汰
volatile-lfu:挑选最近使用次数最少数据淘汰
volatile-ttl:挑选将要过期的数据淘汰(还未过期的时效性数据)
volatile-random:任意挑选数据删除
第二类:检测全库数据
allkeys-lru:挑选长时间未使用的数据淘汰
allkeLyRs-lfu:挑选最近使用次数最小的数据淘汰
allkeys-random:随机挑选数据淘汰
第三类:放弃数据驱逐(redis默认策略)
no-enviction:禁止驱逐数据(redis4.0中默认策略),会引发OOM(Out Of Memory)
4.主从复制
三高构架:高并发,高性能,高可用
为了避免单点Redis服务器故障,准备多台服务器,互相连通。将数据复制多个副本保存在不同的服务器上,连接在一起,并保证数据是同步的。即使有其中一台服务器宕机,其他服务器依然可以继续提供服务,实现Redis的高可用,同时实现数据冗余备份。
多台服务器连接方案(一主多从):

主从复制:将master中的数据有效及时的复制到slave中
master的职责:
写数据
执行写操作时,将出现变化的数据自动的备份到slave
读数据(可忽略)slave的职责:
读数据
写数据(禁止)主从的作用:读写分离、负载均衡、故障恢复、数据冗余、高可用基石
主从复制工作流程
主从复制过程大体可分为3个阶段:
1.建立连接的过程:

建立连接成功之后:master中保存有slave的端口;slave中保存了master的地址和端口。两者之间建立了连接的socket。
2.数据同步
简言之就是将master中的数据同步到各个slave中

全量复制一般是新的slave连接到master时会执行的操作,将master中的数据全部同步到slave中,在进行全量复制的过程中,master会受到新的操作指令,此时的数据会进入复制缓冲区,当全量复制完成时,就执行复制缓冲区中的数据同步,这个过程就叫做部分复制。
当然这是正常情况下执行的流程,当在进行全量复制的过程中,若正值于流量高峰期,复制缓存区容量被装满,又有新的数据进来时。最先进来的数据会被丢弃,此时offset(偏移量)就发生了变化,当全量复制完成后,发现偏移量发生了变化,就又会进行全量复制防止数据丢失。由此可见:数据同步阶段应避开流量高峰期,避免造成master阻塞,影响业务正常执行
3.命令传播阶段
简言之就是数据的反复同步
5.哨兵模式
哨兵是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障是通过投票机制选择新的master并将所有的slave连接到新的master
哨兵的作用:
监控:监控master和slave,不断检查master和slave是否正常运行,master存活检测,master和slave运行情况检测
通知:当被监控的服务器出现问题时:想其它哨兵/客户端发送通知
自动故障转移:断开master和slave的连接,选取一个slave作为新的master,将其他的slave连接新的master,并且告知客户端新的服务地址
注意:哨兵也是一台redis服务器,只是不提供数据相关服务,通常哨兵的个数为单数
哨兵的工作原理
哨兵在进行主从切换的过程中经历三个阶段:
- 监控
- 通知
- 故障转移
在选取新的master之前:哨兵之间会开一个会,选举一个哨兵来做决定者,每一个哨兵手中都有一票,最后票多者为最后的“赢家”。若最后两个哨兵的票数相同则重新选举。
当获胜的哨兵区去决定新的master的时候也会遵循一个规则:
- 不在线的OUT
- 响应慢的OUT
- 与原master断开时间久的OUT
- 优先原则
有关redis一些问题就先列举到这了,还有一个cluster集群的介绍也比较重要。有时间在介绍cluster集群。嘎嘎嘎...
















