Redis内存淘汰策略

在redis作为缓存使用的过程中,当内存不足时,redis根据配置进行缓存淘汰大部分keys,保证后续写入能够成功。

过期策略

redis中对过期的数据处理,有以下三种方式:

  • 定时过期:
    对每个设置过期时间的key都需要建一个定时器,到达设定的过期时间会立即清除。该方法对内存友好,对CPU不友好,会占用大量的CPU资源去处理过期数据
  • 惰性过期
    只有当访问一个key时,才会判断key是否过期,该方案最大化的节省CPU资源,但会占用内存资源(对CPU友好,对内存不友好)
  • 定期过期
    每隔一定的时间,会扫描一定数据的expires字典中的一些数据,并清除其中已过期的数据

expires字典保存所有设置过期时间的数据

内存淘汰策略

在内存不足时(内存使用已经超过maxmemory参数设定值时),需要处理新写入的且需要申请格外空间的数据

  • volatile-lru:从设置过期时间的数据集(expries)中挑选出最近最少使用的数据淘汰
  • volatile-ttl:从设置过期时间的数据集(expries)中挑选将要过期的数据淘汰,ttl的值越大越优先被淘汰
  • volatile-random:从设置过期时间的数据集(expries)中随机选取数据进行淘汰
  • allkeys-lru:从数据集(dict)中挑选最近最少使用的数据淘汰,该策略淘汰的对象时全体key的集合,而非过期的key
  • allkeys-random:从数据集(dict)中选择任意数据进行淘汰
  • noeviction:禁止删除数据,当内存不足时,新写入操作就会报错,请求可以继续进行,保证已插入的数据不会丢失

主要策略:LRU淘汰,TTL淘汰,Random淘汰

  • LRU策略(最近最少使用)核心思想:如果数据最近被访问过,那么将来被访问的机率也就会越高
  • TTL策略:在redis中设置过期时间的数据集expries中挑选数据,根据ttl过期时间来进行淘汰,值越大越先淘汰
  • 随机策略:在数据集中随机获取的数据进行删除
  • LFU策略(最近最少使用):Redis4.0中新增策略,如果数据在最近一段时间很少被访问到,那么认为数据在将来被访问的可能性也比较小,因此,当空间满时,最小访问频率的数据会被最先淘汰(volatile-lfu;allkeys-lfu)

LRU与LFU不同:
LRU是最近最少使用页面置换算法(Least Recently Used),也就是首先淘汰最长时间未被使用的页面!
LFU是最近最不常用页面置换算法(Least Frequently Used),也就是淘汰一定时期内被访问次数最少的页面!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值