```{index} docker; docker-compose.yml, redis; maxmemory, внешние ссылки, ``` # Ограничение использования оперативной памяти (заготовка) ```{note} Это заготовка статьи. ``` ```{seealso} Документация: [Redis reference - Key eviction](https://redis.io/docs/manual/eviction/) ``` Нам будут полезны две опции в конфиге редиса: ```text 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`](https://redis.io/commands/config-set) . Пример конфига с отключённым сбрасыванием `state` на диск и ограничением использования памяти: ```yaml 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 ```