更新时间:2022-02-21 GMT+08:00

Redis默认的数据逐出策略是什么?

逐出指将数据从缓存中删除,以腾出更多的存储空间容纳新的缓存数据。当前版本支持在配置运行参数中修改逐出策略。

单机和主备的Redis实例默认的数据逐出策略为不逐出(noeviction)。单机和主备的Redis实例支持在配置运行参数中修改数据逐出策略。

集群Redis实例默认的数据逐出策略为volatile-lru。如果需要集群Redis实例的数据逐出策略,可以联系管理员。

在达到内存上限(maxmemory)时Redis支持选择以下6种数据逐出策略:

  • noeviction:在这种策略下,如果缓存达到了配置的上限,实例将不再处理客户端任何增加缓存数据的请求,比如写命令,实例直接返回错误给客户端。缓存达到上限后,实例只处理删除和少数几个例外请求。
  • allkeys-lru:根据LRU(Least recently used,最近最少使用)算法尝试回收最少使用的键,使得新添加的数据有空间存放。
  • volatile-lru:根据LRU(Least recently used,最近最少使用)算法尝试回收最少使用的键,但仅限于在过期集合的键,使得新添加的数据有空间存放。
  • allkeys-random:回收随机的键使得新添加的数据有空间存放。
  • volatile-random:回收随机的键使得新添加的数据有空间存放,但仅限于在过期集合的键。
  • volatile-ttl:回收在过期集合的键,并且优先回收存活时间(TTL)较短的键,使得新添加的数据有空间存放。

    当没有键满足回收前提条件时,数据逐出策略volatile-lru、volatile-random、volatile-ttl与noeviction策略相同,具体见上文noeviction介绍。