Sobes.tech
Middle
42

Kā neitaut kešatmiņu, lai tā neaugtu bezgalīgi? Kā pievienot TTL (dzīves ilgumu)?

Uzņēmumi, kur jautāja
Лига Цифровой ЭкономикиЛига Цифровой Экономики

Atbilde no 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.