一、删除策略
删除策略指对已经过期的数据删除的方式
1.1定时删除 : 到点就删 牺牲CPU的性能换取内存的空间
1.2 惰性删除 : 当使用该数据时进行检查,如果到期就删除 牺牲内存的空间换取CPU的性能
1.3 定期删除 : 以固定的频率去检查key是否过期,如果过期就删除
二、淘汰策略
当添加新数据时如果redis的内存已经使用完,此时redis会删除部分数据,保证新数据进来。
redis会优先删除设置了过期时间的数据(易失数据),如果处理完之后空间还不够此时在做全库扫描
淘汰易失数据:
volatile-lru:单位时间内最长时间不使用的数据
volatile-lfu:单位时间内使用最少的数据
volatile-ttl:挑选将要过期的数据淘汰
volatile-random:任意选择数据淘汰
检测全库数据
allkeys-lru:单位时间内最长时间不使用的数据
allkeLyRs-lfu:单位时间内最少使用的数据
allkeys-random:任意选择数据淘汰,相当于随机
放弃数据驱逐
no-enviction(默认)
三、主从结构
一主带多从,主只负责写,从负责读。
主从复制三个阶段:
1、建立连接阶段
2、数据同步阶段,要将master中的数据要复制到slave中去,要经历全量复制(rdb)、部分复制
注意:在部分复制阶段可能引起全量复制,为了避免全量复制频繁发生我们可以调整复制缓冲区的大小,或在操作不频繁的时间进行同步
3、命令传播阶段
四、哨兵模式
在主从结构的基础之上,引入哨兵,哨兵不负责数据处理只负责对主从结构的监控以及故障转移
哨兵模式工作的三个阶段:
1、监控阶段
2、通知阶段
3、故障转移阶段
主观下线 odown
客观下线 sdown 超过一半的哨兵认为下线则为客户下线
哨兵之间投票选择leader,由leader来做故障转移
五、集群模式
六、企业级解决方案
1、缓存预热
就是在应用启动之前,就应该保证将热点数据存储到redis中。(nginx+lua)
2、缓存雪崩
当redis中有大量的key集中过期,此时有大量请求直接访问到数据库,导致数据宕机,数据库宕机之后影响到其它功能的正常使用。
设置key的过期时间时不要集中过期
3、缓存击穿
当某一个热点的key过期,使得短时间大量的请求访问到数据库,导致数据库崩溃。我们可以将这些热点key它的过期时间设置长一
些或者不过期
4、缓存的穿透
由于用户传递过来一些无效的参数,导致在缓存中查不到该数据,从而请求 直接访问到数据库, 解决方法,即使根据参数查不到
数据也要将它存到redis 。