Кэш асинхронного кофеина со статистикой - PullRequest
0 голосов
/ 19 июня 2019

После этого сообщения в блоге о внедрении асинхронного кэша кофеина мы хотели получить статистические данные из кэша.

Мы используем версию 2.7.0 кофеина

Однако, похоже, AsyncCache не имеет доступа к своей статистике:

private AsyncCache<String, Cat> asyncCache = Caffeine.newBuilder()
        .expireAfterWrite(1, TimeUnit.HOURS)
        .recordStats()
        .maximumSize(100)
        .buildAsync();

private Cache<String, Cat> cache = Caffeine.newBuilder()
        .expireAfterWrite(1, TimeUnit.HOURS)
        .maximumSize(100)
        .recordStats()
        .build();

....

cache.stats(); // this is possible
asyncCache.stats(); // no such method in asyncCache

Кроме того, при проверке исходного кода AsyncCache и сравнении его с классом Cache в асинхронном классе нет метода stats().

Есть ли причина для этого?

1 Ответ

1 голос
/ 01 июля 2019

AsyncCache предлагает представление synchronous() для предоставления кэша, блокирующего до завершения асинхронного вычисления.

/**
  * Returns a view of the entries stored in this cache as a synchronous {@link Cache}. A mapping is
  * not present if the value is currently being loaded. Modifications made to the synchronous cache
  * directly affect the asynchronous cache. If a modification is made to a mapping that is
  * currently loading, the operation blocks until the computation completes.
  *
  * @return a thread-safe synchronous view of this cache
  */
Cache<K, V> synchronous();

Это может быть удобно для выполнения операций, таких как invalidate(key), которые не имеют асинхронного аналога. Он также обеспечивает доступ к статистике и метаданным политики.

AsyncCache<Integer, Integer> cache = Caffeine.newBuilder()
    .maximumSize(10_000)
    .recordStats()
    .buildAsync();

// Perform application work
for (int i = 0; i < 4; i++) {
  cache.get(1, key -> key);
}

// Statistics can be queried and reported on
System.out.println(cache.synchronous().stats());

В этом случае мы ожидаем, что первая ошибка загрузит запись, так что последующие поиски будут хитом.

CacheStats{hitCount=3, missCount=1, loadSuccessCount=1, loadFailureCount=0, totalLoadTime=8791091, evictionCount=0, evictionWeight=0}
...