Redis的过期机制

105 阅读2分钟

我们先了解Redis的三个过期处理机制

定时删除

这个就是在设置key的同时也设置一个定时器,当过期的时间到了之后,这个key就会被删除。

优点

  • 可以保证内存被尽快释放。

缺点

  • 创建定时器需要消耗资源
  • 当多个元素在同一时间需要释放的时候,会拖累CPU的使用。当CPU使用紧张的时候有可能没有时间来处理这个删除

惰性删除

这个意思就是,当我们要查询这个元素的时候看看这个元素有没有过期,如果过期就删除并返回null。

优点

  • 对CPU的占用比较少

缺点

  • 如果没有查询这个元素的时候我们就不会去删除,就会导致内存泄露的发送。

定期删除

每隔一段时间去删除过期的元素

优点

  • 可以通过控制删除操作的频率减少对CPU时间的消耗
  • 解决惰性删除带来的内存泄露问题

缺点

对频率的设置不好的话,有可能还不如上面的两种。

Redis的内存淘汰机制

这个机制就会导致,我写入的元素还没有到时间过期,但是却丢失了。

  • noeviction: 当内存不足容纳新的元素的时候,就会在用户添加元素的时候报错
  • allkeys-lru: 当内存不足容纳新的元素的时候,就会在键空间中,丢掉最近最少使用的key,然后添加用户新加过来的数据
  • allkeys-random: 当内存不足容纳新的元素的时候,就会在键空间中,随机丢掉一个key,然后添加用户新加过来的数据
  • volatile-lru: 当内存不足容纳新的元素的时候,在设置过期时间的键空间中,移除最近最少使用的key,然后添加用户新加过来的数据
  • volatile-random: 当内存不足容纳新的元素的时候,在设置了过期时间的键空间中,随机移除一个 key。
  • volatile-ttl: 当内存不足容纳新的元素的时候,在设置了过期时间的键空间中,让更早过期的key先移除

带来的问题

根据上面的一些机制我们就可以知道,我们有时候发现,有些数据还没有到时间呢,就找不到了。