哪些 maxmemory 策略允许在 Redis 中过期?

Which maxmemory policies allow expiration in Redis?

哪些 maxmemory 策略与 redis 过期机制兼容?

只有volatile-ttl吗? noeviction 会阻止旧记录死亡吗?

redis.conf看这里:

MAXMEMORY POLICY: how Redis will select what to remove when maxmemory is reached. You can select among five behaviors:

volatile-lru -> remove the key with an expire set using an LRU algorithm

allkeys-lru -> remove any key according to the LRU algorithm

volatile-random -> remove a random key with an expire set

allkeys-random -> remove a random key, any key

volatile-ttl -> remove the key with the nearest expire time (minor TTL)

noeviction -> don't expire at all, just return an error on write operations

Note: with any of the above policies, Redis will return an error on write operations, when there are no suitable keys for eviction.

  At the date of writing these commands are: set setnx setex append
  incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
  sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby
  zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
  getset mset msetnx exec sort

The default is:

maxmemory-policy noeviction

如果您将策略保留为默认值 'noeviction',或者如果您选择任何 volatile-* 策略但实际上数据库中没有过期键,数据将无限期地保留在 Redis 中。但是请记住,如果您不从 Redis 中删除数据并继续添加更多数据,您最终会 运行 内存不足。