Обновить кэшированные данные в хеш-таблице - PullRequest
1 голос
/ 20 сентября 2009

Чтобы свести к минимуму количество запросов к базе данных, мне нужен своего рода кеш для хранения пар данных. Мой подход теперь - хеш-таблица (со строками в качестве ключей, целыми числами в качестве значений). Но я хочу иметь возможность обнаруживать обновления в базе данных и заменять значения в моем «кэше». Я ищу то, что делает мои сохраненные пары недействительными после заданного промежутка времени, возможно, 10-15 минут. Как бы я это реализовал? Есть ли что-то в стандартном пакете Java, который я могу использовать?

Ответы [ 3 ]

4 голосов
/ 20 сентября 2009

Я бы использовал какое-то существующее решение (есть много структур кэша). ehcache отлично, он может сбрасывать значения на заданный промежуток времени, и я уверен, что он может сделать гораздо больше (я только использовал это)

0 голосов
/ 20 сентября 2009

Вы можете использовать инфраструктуру кэширования, такую ​​как OSCache , EHCache , JBoss Cache , JCS ... Если вы ищете для чего-то, что следует «стандарту», ​​выберите платформу, которая поддерживает стандартный интерфейс JCache (javax.cache) aka JSR-107 .

Для простых нужд, таких как то, что вы описываете, я бы посмотрел на EHCache или OSCache (я не говорю, что они являются базовыми, но они просты для начала), они оба поддерживают истечение в зависимости от времени.

Если бы мне пришлось выбирать одно решение, я бы порекомендовал Ehcache, который имеет мои предпочтения, особенно теперь, когда он присоединился к терракотовой. И просто для записи, Ehcache предоставляет предварительную реализацию JSR107 через net.sf.cache.jcache package.

0 голосов
/ 20 сентября 2009

Вы можете использовать существующие решения (см. Предыдущий ответ)

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

Вам понадобится как минимум 3 участника

  1. Данные кэша, хранящиеся в виде объекта хеш-таблицы,

  2. Дата окончания срока действия следующего кэша

  3. Интервал истечения срока действия кэша устанавливается через конструктор.

Тогда просто используйте общедоступные методы получения данных, которые проверяют состояние срока действия кэша:

  • если не истек срок действия, вызовите методы доступа hastable;

  • если срок действия истек, сначала вызовите метод «загрузки данных», который также вызывается в конструкторе для предварительного заполнения, а затем вызовите методы доступа с хеш-таблицами.

Для еще более классного кеш-класса (я реализовал его в Perl на своей работе), вы можете иметь дополнительные функциональные возможности, которые вы можете реализовать:

  • Срок действия кэша для каждого ключа (вместе с общим сроком действия кэша)

  • Автоматическая, полуавтоматическая и однократная перезагрузка данных (например, одновременная перезагрузка всего кэша; перезагрузка пакета данных, определенного либо по какому-либо предопределенному запросу, либо перезагрузка отдельных элементов данных по частям). Последний подход очень полезен, когда в вашем кеше много обращений к одним и тем же ключам - таким образом вам не нужно перезагружать юниверс каждый раз, когда истекают 3 кета, к которым всегда осуществляется доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...