|NO.Z.00017|——————————|BigDataEnd|——|Hadoop&Redis.V17|——|Redis.v17|缓存过期|淘汰策略.v03|

一、Redis的LRU数据淘汰机制
### --- Redis的LRU数据淘汰机制

~~~     # 在服务器配置中保存了 
~~~     lru 计数器 server.lrulock,会定时(redis 定时程序 serverCorn())更新,
~~~     server.lrulock 的值是根据 server.unixtime 计算出来的。
~~~     # 另外,
~~~     从 struct redisObject 中可以发现,每一个 redis 对象都会设置相应的 lru。
~~~     可以想象的是,每一次访问数据的时候,会更新 redisObject.lru。

~~~     # LRU 数据淘汰机制是这样的:
~~~     在数据集中随机挑选几个键值对,取出其中 lru 最大的键值对淘汰。
~~~     不可能遍历key 用当前时间-最近访问 越大 说明 访问间隔时间越长
~~~     # volatile-lru
~~~     从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰

~~~     # allkeys-lru
~~~     从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
二、LFU
### --- LFU

~~~     LFU (Least frequently used) 最不经常使用,
~~~     如果一个数据在最近一段时间内使用次数很少,那么在将来一段时间内被使用的可能性也很小。
~~~     # volatile-lfu
~~~     allkeys-lfu

~~~     # random
~~~     随机
~~~     # volatile-random
~~~     从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰

~~~     # allkeys-random
~~~     从数据集(server.db[i].dict)中任意选择数据淘汰
三、ttl
### --- volatile-ttl

~~~     # 从已设置过期时间的数据集(server.db[i].expires)
~~~     中挑选将要过期的数据淘汰redis 数据集数据结构中保存了键值对过期时间的表,
~~~     即 redisDb.expires。
~~~     # TTL 数据淘汰机制:
~~~     从过期时间的表中随机挑选几个键值对,取出其中 ttl 最小的键值对淘汰。
### --- noenviction

~~~     从数据集(server.db[i].dict)中任意选择数据淘汰
~~~     禁止驱逐数据,不删除 默认
四、缓存淘汰策略的选择
### --- 缓存淘汰策略的选择

~~~     allkeys-lru : 在不确定时一般采用策略。 冷热数据交换
~~~     volatile-lru : 比allkeys-lru性能差 存 : 过期时间
~~~     allkeys-random : 希望请求符合平均分布(每个元素以相同的概率被访问)
~~~     自己控制:volatile-ttl 缓存穿透
五、案例分享:字典库失效
### --- 字典库失效

~~~     key-Value 业务表存 code 显示 文字拉勾早期将字典库,
~~~     设置了maxmemory,并设置缓存淘汰策略为allkeys-lru结果造成字典库某些字段失效,
~~~     缓存击穿 , DB压力剧增,差点宕机。
### --- 分析:

~~~     # 字典库 : 
~~~     Redis做DB使用,要保证数据的完整性maxmemory设置较小,
~~~     采用allkeys-lru,会对没有经常访问的字典库随机淘汰当再次访问时会缓存击穿,
~~~     请求会打到DB上。
### --- 解决方案:

~~~     不设置maxmemory
~~~     使用noenviction策略
~~~     Redis是作为DB使用的,要保证数据的完整性,所以不能删除数据。
~~~     可以将原始数据源(XML)在系统启动时一次性加载到Redis中。
~~~     Redis做主从+哨兵 保证高可用

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

 

posted on   yanqi_vip  阅读(26)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示