Перезагрузка всех записей cache2k одновременно

Я хотел бы перезагрузить все записи кэша в cache2k сразу. Я использую версию 1.2.2.

Я пытался использовать метод org.cache2k.integration.CacheLoader#load, но он принимает только один ключ и возвращает одно значение. Мне не нравится идея загружать только одну запись из базы данных одновременно. Это не оптимально.

Я ожидаю перезагрузить все записи кэша, используя ровно один запрос БД. Пожалуйста, объясните, как это можно сделать.

Спасибо за ваш ответ!

1 ответ

Решение

Вы можете дать команду cache2k перезагрузить все записи:

  cache.reloadAll(cache.keys(), null);

Однако в текущей версии это перезагружает все записи одну за другой через пул потоков загрузчика. Так называемая "массовая загрузка" в данный момент отсутствует. На это уже есть спрос. Его отслеживать здесь: https://github.com/cache2k/cache2k/issues/116

В случае, если вы всегда загружаете все содержимое навалом, возникает вопрос, нужно ли вам на самом деле иметь отдельные записи в кеше, а лучше кешировать одну карту, содержащую все элементы. Смотрите некоторые обсуждения здесь: https://github.com/cache2k/cache2k/issues/122

Использование загрузчика имеет несколько преимуществ, например, устойчивость и возможность обновления. Если вам это не нужно и вы просто хотите заполнить кеш новым содержимым, которое вы можете использовать cache.keys() чтобы получить список кэшированных ключей, запросите базу данных, а затем обновите весь кеш с помощью cache.putAll(),

Другие вопросы по тегам