Redis缓存淘汰策略

LRU(less recently used)是Redis唯一支持的回收算法,当缓存占用的内存空间达到设置的最大空间时,会自动驱逐老的数据。

驱逐策略有以下几种:
  • noeviction: 不删除策略。达到内存限制时直接返回错误。
  • allkey-lru: 所有key通用。优先删除最近最少使用的key。
  • volatile-lru: 只限设置了expire的key。优先删除最近最少使用的key。
  • allkeys-random: 所有key通用。随机删除一部分key。
  • volatile-random: 只限设置了expire的key。随机删除一部分key。
  • volatile-ttl: 只限设置了expire的key。优先删除剩余时间(time to live)短的key。

一般来说:

  • 如果分为冷热数据,推荐allkey-lru策略
  • 如果需要循环读写所有的key,或者各个key访问频率差不多,可以选择allkeys-random策略。
  • 如果要让Redis根据TTL来筛选删除key,可以使用volatile-ttl策略。

volatile-lruvolatile-random主要应用场景是:既有缓存,又有持久key的实例中,一般这类场景应该使用单独的Redis实例。

值得一提的是,设置expire会消耗额外的内存,所以使用allkey-lru可以更高效地使用内存,因为这样使用的时候不需要设置过期时间。

Redis使用的并不是完全LRU算法,而是近似LRU算法。被删除的key也不一定是最满足LRU特征的key,而是通过近似LRU算法抽样,然后删除访问时间最古老的key。这样做得原因也是为了节省内存空间,在新版本3.0开始,使用pool(池子)来作为候选,这大大提高了算法效率,也使得近似LRU算法越来越接近纯LRU算法。

你可能感兴趣的:(Redis缓存淘汰策略)