Search code examples
redisttlnosql

Which maxmemory policies allow expiration in Redis?


Which maxmemory policies are compatible with redis expiration mechanisms?

Is it only volatile-ttl? Does noeviction stop old records from death?


Solution

  • See here from 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

    If you keep the policy at the default 'noeviction' or if you choose any of the volatile-* ones without actually having expirable keys in the database, the data will remain in Redis indefinitely. Do remember, however, that if you do not delete data from Redis and keep adding more, you'll eventually run out of memory.