Guava Cache expireAfterWrite применим только при использовании getIfPresent?

Этот вопрос заключается в проверке наблюдаемого поведения, чтобы убедиться, что Guava Cache используется правильно.

Я установил два кеша гуавы (см. Код ниже): со сборщиком и без него - как указано в документации по гуаве:

Кэши, созданные с помощью CacheBuilder, не выполняют очистку и высвобождают значения "автоматически", или сразу после истечения срока действия, или чего-либо подобного.

Похоже, что истечение наблюдается только если getIfPresent() метод, т. е. когда ключ запрашивается, то значение null возвращается через промежуток времени> истечения интервала истечения после того, как ключ / значение записано в кеш. В случае Cache, построенного с использованием CacheLoader get() или же getUnchecked() результаты в CacheLoader.load() метод, который будет выполнен, таким образом, истечение срока не наблюдается, т.е. null значение никогда не возвращается.

Это правильное ожидание?

Спасибо за ваше терпение и помощь.

// excerpt from test code

    private static final FakeTicker fakeTicker = new FakeTicker();

    private static LoadingCache<Integer, String> usingCacheLoader = CacheBuilder.newBuilder()
                    .expireAfterWrite(2, TimeUnit.MINUTES)
                    .ticker(fakeTicker)
                    .build(new CacheLoader<Integer, String>() {
                        public String load(Integer keyName) throws Exception {
                            logger.info("Getting value for key: {}", keyName);
                            return getValue(keyName, "with_cache_loader");
                        }
                    });

    private static Cache<Integer, String> withoutCacheLoader = CacheBuilder.newBuilder()
                    .expireAfterWrite(2, TimeUnit.MINUTES)
                    .ticker(fakeTicker)
                    .build();

1 ответ

Решение

Это правда, что если вы вызываете get или getUnchecked, вы никогда не получите null.

Срок действия можно "наблюдать" как с точки зрения производительности - как много времени требуется для получения конкретного ключа, так и для того, нужно ли его заново вычислять, - и от того, отражает ли полученное вами фактическое значение, возможно, устаревшую информацию.

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