Ограничение использования оперативной памяти (заготовка)#

Note

Это заготовка статьи.

See also

Документация: Redis reference - Key eviction

Нам будут полезны две опции в конфиге редиса:

maxmemory 2gb
maxmemory-policy volatile-lru

Наиболее полезными для maxmemory-policy выглядят варианты:

LRU — удаляет ключ, использованный “наиболее давно”:

volatile-lru

Evict the least recently used key with an expiration (когда для ключей установлен EXPIRE)

allkeys-lru

Evict the least recently used key, expiration or not (когда мы не знаем, установлен ли для ключей EXPIRE)

Для Редиса 4.0 и старше есть новый алгоритм LFU — удаляет наименее часто используемый ключ, может быть более эффективным чем LRU.

volatile-lfu

Evict using approximated LFU among the keys with an expire set (когда для ключей установлен EXPIRE)

allkeys-lfu

Evict any key using approximated LFU (когда мы не знаем, установлен ли для ключей EXPIRE)

Во время исполнения (runtime) опции можно применить / изменить с помощью CONFIG SET .

Пример конфига с отключённым сбрасыванием state на диск и ограничением использования памяти:

redis: 
  image: harbor.appworks.ru/infra/redis:release
  command: '- /bin/sh - -c - redis-server --save "" --maxmemory 2gb --maxmemory-policy allkeys-lfu'
  healthcheck: 
    test: [ "CMD", "redis-cli", "--raw", "incr", "ping" ]
  deploy:
    # Alexey: Would limit memory usage for docker container, but I don't think it's a good idea
    ### resources: limits: memory: 2048M 
    restart_policy: 
      condition: on-failure 
      mode: replicated 
      replicas: 1 
      # Alexey: check what does this setting do
      ### endpoint_mode: dnsrr
      logging: 
        driver: json-file 
        options: 
          max-file: 2 
          max-size: 5m