Back to questions
Лига Цифровой Экономики
Middle
3
Как инвалидировать кэш, чтобы он не разрастался бесконечно? Как добавить TTL (time-to-live)?
Companies where asked
Answer from AI
sobes.tech AI
Чтобы кэш не разрастался бесконечно, нужно реализовать механизм инвалидирования устаревших данных и ограничение размера.
Как добавить TTL (time-to-live):
- При сохранении значения в кэш сохраняйте вместе с ним время истечения срока действия (например, текущее время + TTL).
- При получении значения проверяйте, не истёк ли срок действия. Если истёк — удаляйте элемент и возвращайте отсутствие значения.
Пример простого кэша с TTL на Python:
import time
class TTLCache:
def __init__(self, ttl_seconds):
self.ttl = ttl_seconds
self.store = {}
def set(self, key, value):
expire_at = time.time() + self.ttl
self.store[key] = (value, expire_at)
def get(self, key):
item = self.store.get(key)
if not item:
return None
value, expire_at = item
if time.time() > expire_at:
del self.store[key]
return None
return value
def cleanup(self):
now = time.time()
keys_to_delete = [k for k, (_, exp) in self.store.items() if exp <= now]
for k in keys_to_delete:
del self.store[k]
Как ограничить размер кэша:
- Используйте структуры данных с ограничением размера, например, LRU-кэш (Least Recently Used).
- При достижении максимального размера удаляйте наименее используемые элементы.
В Python для этого можно использовать functools.lru_cache или сторонние библиотеки, например cachetools.