Потокобезопасные коллекции с LRU-кэшированием на Java - PullRequest
0 голосов
/ 05 сентября 2018

Я пишу многопоточный клиент Rabbit MQ на Java, который будет обрабатывать файлы. Тем не менее, мне нужен быстрый и большой пул кеша, в основном список только для чтения карт. Данные будут извлечены с сервера SQL по запросу, но я также хочу, чтобы в кэш был встроен алгоритм LRU.

Я нашел полуфункциональный сайт http://cacheonix.org, который, кажется, дает то, что я хочу, однако страница загрузки не работает должным образом.

У вас есть какие-нибудь намеки?

Я думаю, что большинство моих применений будут удовлетворены LinkedHashMap в сочетании с механизмом кэширования LRU / оболочкой, но я спрашиваю в первую очередь. https://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html

1 Ответ

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

Если вы хотите испачкать руки для реализации кэша с LRU, LinkedHashMap может быть выбором.

LinkedHashMap позволяет получить доступ к элементам с порядком вставки или порядком доступа (по умолчанию это порядок вставки), который поддерживается двойным списком.

Для порядка доступа, при реализации операций доступа получения или размещения, доступ к элементу будет удален до конца списка двойной связи.

Более того, с помощью защищенного метода, как показано ниже, LinkedHashMap позволяет расширить его и настроить собственную стратегию удаления старшего элемента.

protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
        return false;
}

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

Кстати, LinkedHashMap не является поточно-ориентированным, однако вы можете реализовать свой собственный поточно-безопасный метод получения / установки.

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