Запись кэша не удаляется из хранилища кэша (SingleFileCacheStore)

#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() , например, из другого потока обслуживания, который может периодически запускаться в вашем приложении.