2009-09-19 7 views
1

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

ответ

0

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

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

Вам потребуется не менее 3 членов

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

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

  3. кэша Интервал истечения устанавливается с помощью конструктора.

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

  • , если не истек, аксессор колла-hastable в;

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

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

  • Индивидуальные за клавишной истечения кэша (в сочетании с общее общее время истечения кеша)

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

+0

На данный момент это будет опыт обучения, но я буду иметь Ehcahce и других в виду, когда мне это нужно для реального проекта. На этот раз спецификация не требует этой конкретной функции - это только то, что я хочу попробовать и сделать в любом случае (но никогда не публиковать). – matpe

4

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

0

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

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

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

+0

Спецификация JSR-107 была отличной. Это действительно касается того, о чем мой вопрос. – matpe

Смежные вопросы