十四、Redis的缓存过期淘汰策略

一、默认内存大小

默认在64位操作系统下是不限制内存大小的,在32位操作系统下是3G。

 

二、推荐设置内存的大小

推荐为最大物理内存的75%。(关键字:HashMap的负载因子默认为0.75

 

三、三种过期key的删除策略 

当一个key过期了,并不是立即从Redis中删除。而是以下三种方式:

1、立即删除

优点

  • 能保证内存中数据的最大新鲜度,因为它保证过期键值会在过期后马上被删除,其所占用的内存也会随之释放

缺点

  • 对cpu是最不友好的。因为实时删除操作会占用cpu的时间

总结

  • 对CPU不友好,用处理器性能换取存储空间 (拿时间换空间)

2、惰性删除

key到达过期时间时,不做处理。等到下次访问时判断,如果过期则删除key,未过期则返回数据。

优点

  • 节省处理器性能

缺点

  • 占用空间大
  • 如果redis中存在大量不再使用的过期key,则一直无法删除,除非手动FLUSHDB。

总结

  • 对内存不友好,用存储空间换取处理器性能(拿空间换时间)

3、定期删除

定期删除策略是前两种策略的折中,定期删除策略每隔一段时间执行一次删除过期键操作,并通过限制删除操作执行的时长和频率来减少删除操作对CPU时间的影响。

周期性的轮询Redis库中的时效性数据,采取随机抽取的策略,利用过期数据占比的方式控制删除额度

  • 特点1:CPU性能占用设置有峰值,检测频度可自定义设置
  • 特点2:内存压力不是很大,长期占用内存的冷数据会被持续清理

总结

  • 周期性抽查存储空间 (随机抽查,重点抽查)

定期删除策略的难点是确定删除操作执行的时长和频率:如果删除操作执行得太频繁,或者执行的时间太长,定期删除策略就会退化成立即删除策略,以至于将CPU时间过多地消耗在删除过期键上面。如果删除操作执行得太少,或者执行的时间太短,定期删除策略又会和惰性删除束略一样,出现浪费内存的情况。因此,如果采用定期删除策略的话,服务器必须根据情况,合理地设置删除操作的执行时长和执行频率可能存在漏网之鱼,一直没有被抽取过

 

四、八种内存淘汰策略

1、八种策略

noeviction: 不会驱逐任何key,即当内存超出限制后,报错返回OOM,但不驱逐任何key(出厂默认配置)

allkeys-lru: 对所有key使用LRU算法进行删除(推荐)

volatile-lru: 对所有设置了过期时间的key使用LRU算法进行删除

allkeys-random: 对所有key随机删除

volatile-random: 对所有设置了过期时间的key随机删除

volatile-ttl: 删除马上要过期的key

allkeys-lfu: 对所有key使用LFU算法进行删除

volatile-lfu: 对所有设置了过期时间的key使用LFU算法进行删除

 

LRU:Least Recently Used 最近最少使用。

LFU:Least Frequently Used 最不常使用。

2、总结

2 * 4 = 8

2是指2个维度

  • 过期键中筛选
  • 所有键中筛选

4是指4个方面

  • LRU
  • LFU
  • random:随机
  • ttl:过期时间

 3、配置

 

posted @   幻月hah  阅读(638)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示