Как очистить данные с истекшим сроком действия в кэше?

#caching #design-patterns

#кэширование #шаблоны проектирования

Вопрос:

Я реализовал ExpireLRUCache класс, который будет очищать данные по истечении времени ожидания. Для этого есть два способа.

  1. Используйте a timer для очистки данных с истекшим сроком действия
  2. Вызовите clean функцию в Add и Get

Итак, какая реализация лучше?

Ответ №1:

Сделайте самую простую вещь, которая может сработать. Например, предполагая, что ваш кэш имеет фиксированный размер, вызовите clean при добавлении значений. Добавление значений изменяет количество кэшированных элементов, но получение значений — нет. Кроме того, идея кэша заключается в том, что получение выполняется чаще, чем добавление, и вы хотите свести к минимуму количество раз, когда вы вызываете clean . Использование таймера означает потоки и сложность. Докажите, что простейшая реализация не будет работать, прежде чем попробовать что-то более сложное.

Если вы не пишете это как задачу программирования, лучше всего использовать зрелый и популярный кэш, который кто-то уже написал. Есть много мест, где можно ошибиться при реализации кэша. Например, я работаю на Java. Если мне нужен простой кэш, я использую реализацию Guava. Я бы не стал пытаться писать свой собственный кэш.

Наконец, даже если вы пишете это как задачу программирования, я предлагаю найти существующий алгоритм кэширования LRU и реализовать его в коде. Когда это сработает, вы можете изменить код по своему вкусу.