redis 过期淘汰机制

◇◆丶佛笑我妖孽 提交于 2020-11-08 06:44:34

redis是基于内存的,内存都是有限的,如果我们往redis中添加的数据超出了redis的内存范围会怎么样呢?
答案:某些数据将会被删除

那么如何删除呢?

  • 手动设置过期时间:比如使用set key (expire time)设置为1个小时过期,那么1个小时之后get key还能不能得到数据呢? 答案肯定是得不到的了,那就证明数据被删除了吗?显然不是,设置过期时间,redis也只是 ---- 定期删除+惰性删除
  • 简单说:设置了过期的key,redis会定期去检查当前过期的,然后删除,但是不是遍历所有key找出过期的,而是随机抽取,那么这样定期删除肯定就不能保证所有过期的key被删除掉,那内存中就会堆积大量过期的key,当然当我们手动 get key时如果过期了,则redis会删除,那么如果没有被随机抽取我们也没有手动去操作的过期key,redis如何处理呢—— “淘汰”策略

Redis 有哪几种数据“淘汰”策略?

  • 内存淘汰策略(LRU算法)
    • noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。一般不使用
    • allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key(这个是最常用的)
    • allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key
    • volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key
    • volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key
    • volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!