Java кеш-библиотека mapdb истекает максимальный размер
Я хотел бы использовать библиотеку mapdb для кэширования max n объекта. Я написал что-то вроде этого:
DB dbMemory = DBMaker
.memoryDB()
.make();
HTreeMap<Long, String> inMemory = dbMemory
.hashMap("inMemory", Serializer.LONG, Serializer.STRING)
.expireMaxSize(2)
.create();
inMemory.put((long)1, "1");
inMemory.put((long)2, "2");
inMemory.put((long)3, "3");
inMemory.put((long)4, "4");
inMemory.getValues().forEach(val -> System.out.println(val));
Мой ожидаемый результат должен быть просто:
3
4
Но я получил (не всегда в таком порядке):
1
2
3
4
Я уверен, что это просто мое недопонимание использования этой библиотеки, поэтому кто-то может показать мне, что я делаю неправильно?
1 ответ
Документация HTreeMap гласит:
Временное выселение всегда помещает запись в Очередь истечения. Но другие критерии истечения срока действия (размер и ограничение по объему) также требуют подсказки, когда помещать запись в очередь истечения срока действия. В следующем примере ни одна запись не помещается в очередь, и ни одна запись никогда не истекает.
HTreeMap cache = db .hashMap("cache") .expireMaxSize(1000) .create();
Так что вам нужно добавить подсказку. Далее в документации сказано:
Есть три возможных триггера, которые поместят вход в Очередь Истечения:
expireAfterCreate()
,expireAfterUpdate()
а такжеexpireAfterGet()
,
Добавьте их - возможно, вы захотите создать и обновить подсказки.