Redis缓存淘汰策略​​​​​​​​​​​​​​

应用系统分层架构,为了加速数据访问,并减轻数据库访问的压力,会把最常访问的数据,放在缓存(cache)里(redis,mangdb,memcache等),避免每次都去访问数据库。缓存是指,将一些需要读取数据放在磁盘或者内存中,由于追求速度从而一般是放在内存中。缓存容量有限,若缓存满了系统是如何淘汰一些数据的呢?就涉及到缓存淘汰策略。

一、三种缓存淘汰策略:

1.FIFO- First In First Out ---- 先进先出

2.LFU - Least Frequently Used ---- 最少 - 使用

3.LRU - Least Recently Used ---- 最近 - 最少 - 使用

二、Redis缓存的八种淘汰策略

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算法进行删除

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

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

1、立即删除:根据delete方法在缓存中立即删除当前key。

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

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

 

四、Redis采用的是惰性删除+定期删除的方案

Redis 的定期扫描只会扫描设置了过期时间的键,Redis 通过一个单独的过期字典expires(可以看作是 hash 表)来保存设置了过期时间的数据过期的时间,所以不会出现扫描所有键的情况,即使如此,redis也是默认是每隔 100ms 就随机抽取过期字典中的 key,检查其是否过期,如果过期就删除。如果不定时随机抽查而是全部扫描,那么将可能有很长的时间导致服务对外不可用,这是无异于一场灾难。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值