Если вам нравится читать статьи на Medium и вы заинтересованы в том, чтобы стать участником, я буду рад поделиться с вами своей реферальной ссылкой!
Кэширование является важной стратегией оптимизации производительности приложений. Этот подход заключается в хранении часто используемых или дорогостоящих данных в высокоскоростной системе хранения. Различные стратегии вытеснения из кэша определяют, какие элементы данных следует сохранять, а какие удалять из кэша. В этой статье основное внимание уделяется трем популярным стратегиям: «наиболее редко используемые» (LRU), «наименее часто используемые» (LFU) и «первым пришел – первым обслужен» (FIFO). Мы проиллюстрируем каждую стратегию примерами Golang с использованием пакета Redis.
Прежде чем мы продолжим, убедитесь, что вы установили пакет Redis для Go, запустив:
go get github.com/go-redis/redis
Политики выселения Redis
Точное поведение Redis при достижении предела maxmemory
настраивается с помощью директивы конфигурации maxmemory-policy
.
Доступны следующие политики:
- noeviction: новые значения не сохраняются при достижении предела памяти. Когда база данных использует репликацию, это относится к первичной базе данных.
- allkeys-lru: сохраняет последние использованные ключи; удаляет наименее использовавшиеся (LRU) ключи
- allkeys-lfu: сохраняет часто используемые ключи; удаляет наименее часто используемые (LFU) клавиши
- volatile-lru: Удаляет последние использованные ключи с полем
expire
, установленным наtrue
. - volatile-lfu: удаляет наименее часто используемые ключи с полем
expire
, установленным наtrue
. - allkeys-random: случайным образом удаляет ключи, чтобы освободить место для новых добавленных данных.
- volatile-random: случайным образом удаляет ключи с полем
expire
, установленным наtrue
. - volatile-ttl: удаляет ключи с полем
expire
, установленным наtrue
, и самым коротким оставшимся значением времени жизни (TTL).