Sobes.tech
Middle
37

Kako invalidirati keš memoriju da se ne širi beskonačno? Kako dodati TTL (vreme trajanja)?

Компаније где су питане
Лига Цифровой ЭкономикиЛига Цифровой Экономики

Одговор од АИ

sobes.tech АИ

Чтобы кэш не разрастался бесконечно, нужно реализовать механизм инвалидирования устаревших данных и ограничение размера.

Как добавить 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.