#java #spring #caching #infinispan
#java #весна #кэширование #infinispan
Вопрос:
Я использую singleFileCacheStore
. Я установил maxEntries
значение 0 с passivation
отключенным
<persistence passivation="false" >
<singleFile fetchPersistentState="true" preload="true"
ignoreModifications="false"
purgeOnStartup="false" maxEntries="0" >
</singleFile>
</persistence>
В моем приложении я запускаю cache.remove(key)
, но я все еще вижу записи в базовом файле.
Любая подсказка, что не так? Нужно ли мне вызывать какой-либо дополнительный API.
Ответ №1:
Пространство для записи просто помечается, и оно будет повторно использоваться новыми или обновленными записями. Таким образом, вы всегда будете видеть старые данные, пока не будет записано что-то новое.
При обработке очистки сам файл будет усечен / сжат. SingleFileCacheStore
Реализация очень проста, поэтому это происходит только в том случае, если в конце файла есть свободное место. Уплотнение не происходит, если у вас есть свободное место где-то в середине файла. Это не идеально, но достаточно хорошо, поскольку обычно всегда есть колебания в записях в кэше. Но это означает, что при принудительной очистке файл может не быть усечен, даже если есть свободное место.
Смотрите в разделе удаление в документации, как вы управляете очисткой. По сути, это:
Целью EvictionManager является управление потоком выселения / истечения срока действия, который периодически удаляет элементы из DataContainer. Если поток удаления отключен (значение wakeupInterval равно -1), удаление может быть запущено вручную с помощью EvictionManager.processEviction() , например, из другого потока обслуживания, который может периодически запускаться в вашем приложении.