我想使用 mapdb 库来缓存最多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
我确定这只是我对使用此库的误解,因此有人可以告诉我我在做什么错吗?
答案 0 :(得分:0)
基于时间的逐出将始终将条目放入过期队列。但 其他到期条件(大小和空间限制)在何时也需要提示 将条目放入到期队列。在以下示例中,没有条目 排入队列,并且任何条目都不会过期。
HTreeMap cache = db .hashMap("cache") .expireMaxSize(1000) .create();
因此您需要添加一个提示。该文档进一步说:
有三种可能的触发条件,它们会将条目输入到到期队列中:
expireAfterCreate()
,expireAfterUpdate()
和expireAfterGet()
。
添加这些-您可能需要创建和更新提示。