Вопрос проверяет знание стратегий управления кэшем, которые критичны для оптимизации производительности и согласованности данных в системах.
Кэширование — это техника хранения часто используемых данных в быстром хранилище для ускорения доступа. Когда кэш заполняется, необходимо решить, какие элементы удалить, чтобы освободить место для новых. Алгоритмы, управляющие этим процессом, называются политиками вытеснения (eviction policies).
from collections import OrderedDict
class LRUCache:
def __init__(self, capacity: int):
self.cache = OrderedDict()
self.capacity = capacity
def get(self, key):
if key not in self.cache:
return -1
# Перемещаем ключ в конец (как недавно использованный)
self.cache.move_to_end(key)
return self.cache[key]
def put(self, key, value):
if key in self.cache:
self.cache.move_to_end(key)
self.cache[key] = value
if len(self.cache) > self.capacity:
# Удаляем первый (самый старый) элемент
self.cache.popitem(last=False)
# Использование
cache = LRUCache(2)
cache.put(1, 'a')
cache.put(2, 'b')
print(cache.get(1)) # 'a'
cache.put(3, 'c') # Вытеснит ключ 2
print(cache.get(2)) # -1 (не найден)Политики применяются в базах данных (например, буферный пул InnoDB), операционных системах (кэш страниц), веб-браузерах (кэш ресурсов) и распределённых кэшах (Redis, Memcached). Выбор зависит от workload: LRU хорош для общих целей, LFU — для долгоживущих популярных данных, TTL — для данных с ограниченным сроком актуальности.
Вывод: Понимание политик очистки кэша позволяет проектировать эффективные системы, балансируя между скоростью доступа, использованием памяти и актуальностью данных. LRU — наиболее распространённый выбор для универсальных сценариев.
Уровень
Рейтинг:
3
Сложность:
5
Навыки
Redis
Networks
Ключевые слова
Подпишись на Java Developer в телеграм