2011-01-10 3 views
2

Я реализую кеш, используя карту, расширенную из LinkedHashMap (поэтому я могу реализовать removeEldestEntry). В старой реализации используется обычная хэш-карта, обновленная с заданным интервалом. Мне было интересно, как я могу хранить данные в кэше. Я сомневаюсь, что я могу просто обновиться в определенное время, не испортив точку LRU. Было бы особенно дорого запросить БД для отметки времени в записи?Обновление кэша LRU

+0

http://download.oracle.com/javase/1.4.2/docs/api/java/util/LinkedHashMap.html#removeEldestEntry%28java.util.Map.Entry%29 EldestEntry - _number based_, а не time- исходя из. В LRU вам нужно минимальное время выживания - ограничение во времени, EledestEntry - ограничение длины - ограничение по размеру. Мне интересно, как вы планируете использовать LRU с помощью EldestEntry? – Nishant

+0

@ Нишан, у меня создалось впечатление, что LRU просто управляет тем, что было удалено, а не когда. Когда я ударил ограничение по размеру, я хочу удалить объект, который использовался в последнее время. –

+0

LRU - наименее недавно используемый, как я знаю, должен удалить самую старую запись. Другими словами, вы хотите удалить объект, который запрашивается наименее часто. Теперь, ваш хэш-файл размером, скажем, 100 и 100-й элемент является наиболее часто используемым, вы хотите его удалить? Существует два варианта (1) использования очереди приоритетов с приоритетом, установленным на отметке времени при добавлении объекта (2) Использование LHM, но каждый раз, когда вызывается get(), удаляйте запись и повторно вставляете на карту mimick LRU. – Nishant

ответ

0

Я закончил работу с LinkedHashMap, заказал время доступа и проверил против db для временных меток. Это работало как прелесть и значительно уменьшало нагрузку на память приложения.

1

Почему бы не использовать OS Cache - нет смысла изобретать колесо.

+0

Или любой другой кеш, если на то пошло. У большинства есть время для жизни. –

+0

Причина в том, что это очень старый проект, и ни один из первоначальных разработчиков не остается. Я хотел бы избежать добавления каких-либо новых зависимостей и просто переустановить один файл. –

+0

@Bobnix. Возможно, но я считаю, что вы не должны срезать углы. :) –

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