LRU (Least Recently Used) Cache — eviction policy, который удаляет least-recently-accessed items при переполнении. Classic implementation: HashMap + doubly linked list для O(1) get/put. Redis default: `maxmemory-policy allkeys-lru`. Alternatives: LFU (Least Frequently Used), FIFO, random. LRU универсально хорошо для web caching (recent content is hot).
Ниже: подробности, пример, смежные термины, FAQ.
Бесплатный онлайн-инструмент — проверка HTTP-заголовков: результат мгновенно, без регистрации.
// Python @lru_cache decorator
from functools import lru_cache
@lru_cache(maxsize=128)
def expensive(n): return n * n
// Redis LRU policy
maxmemory 1gb
maxmemory-policy allkeys-lruLRU Cache работает на основе принципа удаления наименее используемых элементов при достижении лимита памяти. Этот механизм реализуется через связку HashMap и двусвязного списка (doubly linked list). HashMap обеспечивает O(1) время доступа к элементам, а двусвязный список позволяет быстро удалять элементы из начала списка, которые были наименее недавно использованы.
При добавлении нового элемента в кэш, старый элемент, который находился в начале списка (наименее используемый), удаляется. Это позволяет поддерживать актуальность кэша и оптимизировать использование памяти.
Пример реализации LRU Cache в коде может включать следующие шаги:
get и put, которые будут обновлять порядок элементов в списке и, при необходимости, удалять наименее используемые.LRU Cache имеет несколько преимуществ, которые делают его популярным выбором для веб-кэширования:
get и put.Однако у LRU Cache есть и недостатки:
Важно учитывать эти факторы при выборе стратегии кэширования для конкретной системы.
Помимо LRU Cache, существуют и другие стратегии кэширования, которые могут быть более эффективными в определённых ситуациях:
Выбор конкретной стратегии зависит от требований к системе, типа данных и ожидаемого поведения пользователей. Например, в Redis можно настроить стратегию кэширования с помощью параметра maxmemory-policy, который по умолчанию установлен в allkeys-lru, но также может быть установлен в allkeys-lfu или другие варианты.
LRU — recent matters. LFU — frequency matters. Для web: LRU обычно win (recency correlates с future access). LFU лучше для static catalog queries.
Redis uses approximate LRU для efficiency. Sample 5 keys, evict oldest. Достаточно точный для most use cases.
Разное. TTL — absolute expiry (delete after N sec). LRU — eviction при memory pressure. Часто сочетают: TTL на data + LRU для overflow.
Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.