Redis的过期策略与缓存淘汰策略

215 阅读2分钟

1. 过期策略

1.1 定期删除:默认每隔100ms检查进行随机抽取检查是否有过期的key,有过期的key则删除。如果选择定期检查全部的key的话会消耗大量资源致使崩溃,所以选择随机抽取检查,但是会导致很多key到期未被删除。

1.2 惰性删除:获取某个key时,Redis会进行检查,若过期则此时删除。

2. 缓存淘汰策略

当内存不足以容纳新写入的数据时,Redis提供了5种数据淘汰策略:

  • volatile-lru:使用LRU(Least Recently Used)算法进行数据淘汰,淘汰最近最少使用的key,只淘汰设定了有效期的key。
  • allkeys-lru:使用LRU算法进行数据淘汰,所有的key都可以被淘汰。
  • volatile-random:随机淘汰数据,只淘汰设定了有效期的key。
  • allkeys-random:随机淘汰数据,所有的key都可以被淘汰。
  • volatile-ttl:淘汰剩余有效期最短的key。
  • noeviction:不淘汰key,直接报错。

最好为Redis指定一种有效的数据淘汰策略以配合maxmemory设置,避免在内存使用满后发生写入失败的情况。一般来说,推荐使用的策略是volatile-lru,并辨识Redis中保存的数据的重要性。对于那些重要的,绝对不能丢弃的数据(如配置类数据等),应不设置有效期,这样Redis就永远不会淘汰这些数据。对于那些相对不是那么重要的,并且能够热加载的数据(比如缓存最近登录的用户信息,当在Redis中找不到时,程序会去DB中读取),可以设置上有效期,这样在内存不够时Redis就会淘汰这部分数据。配置方法:

maxmemory-policy volatile-lru   #默认是noeviction,即不进行数据淘汰