Redis 内存淘汰策略有哪些?

Redis提供了以下几种内存淘汰策略:

  1. volatile-lru : 从已设置过期时间集合中挑选最久未使用的行删除。
    适用于服务器内存很大或者对数据不重要的情况。
  2. volatile-random: 随机删除已设置过期时间集合中的行。
    速度比上面快,但元素选择不理想。
  3. allkeys-lru :从所有集合中,挑选最久未使用的行删除。
  4. allkeys-random :随机删除数据库中的行。
  5. volatile-ttl : 基于元素过期时间(TTL)剔除数据。
    优先剔除那些TTL较短的数据。
  6. noeviction : 不剔除任何元素,只在必要的时候返回出错信息。
  7. volatile-lfu :根据元素的频率删掉最不常使用的元素。
    跟LUR相比,算法复杂度更高。

使用方法:

  1. 通过maxmemory设置内存使用上限。
maxmemory <bytes>
  1. 设置内存淘汰策略。
maxmemory-policy <strategy>

策略有:volatile-lru、allkeys-lru 等。

  1. 当内存超限时,会按照策略移除数据。

不同策略的优缺点:

  1. LRU : 最容易实现,但导致元素分布失衡。
  2. 随机:选择随机,但频繁元素可能较多概率被删。
  3. TTL : 优先挑选TTL短的元素回收。
  4. 频率:根据元素访问频率淘汰,但算法复杂。

总的来说,Redis提供了多种内存淘汰策略,可以按需选择。主要考虑元素的访问频率、过期时间、内存使用等因素。