Java кеш-библиотека mapdb истекает максимальный размер - PullRequest
0 голосов
/ 11 декабря 2018

Я бы хотел использовать библиотеку 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 Ответ

0 голосов
/ 11 декабря 2018

Документация HTreeMap гласит:

Выселение, основанное на времени, всегда помещает запись в Очередь истечения срока действия.Но другие критерии истечения срока действия (размер и ограничение по объему) также требуют подсказки, когда помещать запись в очередь истечения срока действия.В следующем примере ни одна запись не помещается в очередь, и ни одна запись никогда не истекает.

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

Так что вам нужно добавить подсказку.Далее в документации сказано:

Существует три возможных триггера, которые будут помещать запись в очередь истечения: expireAfterCreate(), expireAfterUpdate() и expireAfterGet().

Добавить эти- вам, вероятно, нужны советы по созданию и обновлению.

...