Я хотел бы использовать библиотеку 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
Я уверен, что это просто мое непонимание использования этой библиотеки, поэтому может ли кто-нибудь показать мне, что я делаю неправильно?




Документация HTreeMap говорит:
Time based eviction will always place entry into Expiration Queue. But other expiration criteria (size and space limit) also needs hint when to place entry into Expiration Queue. In following example no entry is placed into queue and no entry ever expires.
HTreeMap cache = db .hashMap("cache") .expireMaxSize(1000) .create();
Итак, вам нужно добавить подсказку. В документации далее говорится:
There are three possible triggers which will place entry into Expiration Queue:
expireAfterCreate(),expireAfterUpdate()andexpireAfterGet().
Добавьте их - вы, вероятно, захотите создать и обновить подсказки.