Redis数据过期与淘汰策略

Redis数据过期与淘汰策略


在高并发的场景下,如果 Redis 不处理过期数据或内存不足时不采取淘汰策略,可能导致数据积压、性能下降,甚至系统宕机。

数据过期策略

Redis 的数据过期策略是指 Redis 对设置了过期时间的键(key)进行管理和删除的策略,当一个键被设置了过期时间后,Redis 需要一种机制来确定何时以及如何删除这些过期的键,以释放内存空间并且保证数据的时效性
Redis提供了两种过期策略:

  1. 惰性删除:当设置的key过期之后,redis不会将他立马删除,当再次需要用到该key时,先去检查他是否过期,如果已经过期,则对其进行删除操作

    优点:对 CPU 时间是最友好的。因为只有在访问键的时候才会检查过期情况,不会产生额外的 CPU 消耗来主动检查过期键

  2. 定期删除:Redis 每隔一段时间,就会对数据库进行一次检查,从一定数量的数据库中,随机抽取一定数量的键,检查这些键是否过期,如果过期,则删除这些键
    这种定期清理有两种模式:

    • SLOW模式是定时任务,执行频率默认为10hz,每次不超过25ms,可以通过修改配置文件redis.config的hz选项来调整次数
    • FAST模式是执行频率不固定,但两次间隔不低于2ms,每次耗时不超过1ms

    优点:可以通过限制删除操作执行的时长和频率来减少删除操作对 CPU的影响。另外定期删除,也能有效释放过期键占用的内存

那Redis采取了哪一种过期策略呢?
Redis 实际使用的是惰性删除和定期删除相结合的策略,通过这种组合方式,既能够在一定程度上保证内存中不会积累过多的过期键,又能够避免因为频繁的定时器操作或者大量的键检查操作而对 CPU 性能产生严重的影响,在这种策略下,大部分过期键会在定期删除阶段被处理,而那些在定期删除阶段遗漏的过期键,在被客户端访问到时会通过惰性删除机制进行处理


数据淘汰策略

当Redis的内存不够用的时候,此时再向Redis中添加key,他就会以某种策略对当前内存中的一部分数据进行删除,释放一定的内存空间,而挑选删除数据的规则就是数据淘汰策略
Redis支持8中不同的策略

  1. noeviction:不淘汰任何key,内存不够用时就无法再添加数据,默认采取这种策略
  2. volatile-ttl:对于设置了TTL的key,比较剩余的TTL。先淘汰剩余TTL较小的key
  3. allkeys-random:对全部的key进行随机淘汰
  4. volatile-random:对于设置的TTL过期时间的key进行随机淘汰
  5. allkeys-lru:对全体的key,通过LRU算法进行淘汰
  6. allkeys-lfu:对全体的key,通过LFU算法进行淘汰
  7. volatile-lru:对设置了TTL的key,通过LRU算法进行淘汰
  8. volatile-lfu:对设置了TTL的key,通过LFU算法进行淘汰

LRU算法
LRU(Least Recently Used),最近最少使用算法,用当前时间减去最后一次访问时间,这个时间越大淘汰的优先级越高
LFU算法
LFU(Least Frequently Used),最不常用算法,会统计每个key的访问频率,频率越小的淘汰优先级越高

可以修改配置文件redis.configmaxmemory-policy选项来修改淘汰策略
在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值