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(),

Добавьте их - возможно, вы захотите создать и обновить подсказки.

Другие вопросы по тегам