Java缓存库mapdb过期的最大大小

时间:2018-12-11 11:21:16

标签: java caching mapdb

我想使用 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

我确定这只是我对使用此库的误解,因此有人可以告诉我我在做什么错吗?

1 个答案:

答案 0 :(得分:0)

HTreeMap documentation说:

  

基于时间的逐出将始终将条目放入过期队列。但   其他到期条件(大小和空间限制)在何时也需要提示   将条目放入到期队列。在以下示例中,没有条目   排入队列,并且任何条目都不会过期。

HTreeMap cache = db
    .hashMap("cache")
    .expireMaxSize(1000)
    .create();

因此您需要添加一个提示。该文档进一步说:

  

有三种可能的触发条件,它们会将条目输入到到期队列中:expireAfterCreate()expireAfterUpdate()expireAfterGet()

添加这些-您可能需要创建和更新提示。