У меня есть LoadingCache<K,V>
, созданный с помощью CacheBuilder
LoadingCache<K,V> myCache = CacheBuilder.newBuilder()
.expireAfterAccess(1, TimeUnit.MINUTES)
.maximumSize(500)
.build(someCacheLoader);
Мне нужно периодически перебирать все записи (ключи и значения) в кеше. Я знаю, что могу сделать это, используя LoadingCache#asMap()
и либо:
- итерация над этим видом карты
Map#entrySet()
или - перебираем только
Map#keySet()
и явноMap#get(Object)
значения.
В первом случае:
for (Map.Entry<K, V> entry : myCache.asMap().entrySet()) {
K key = entry.getKey();
V value = entry.getValue();
doSomeWorkOn(key, value);
}
Будет ли это обновлять время доступа каждой записи в кеше? Я довольно хорошо читал JavaDoc для CacheBuilder#expireAfterAccess(long, TimeUnit)
, но обнаружил, что это двусмысленно/неясно в этом случае:
Указывает, что каждая запись должна автоматически удаляться из кеша после истечения фиксированной продолжительности после создания записи, последней замены ее значения или последнего доступа. Время доступа reset выполняется всеми операциями чтения и записи кеша (включая
Cache.asMap().get(Object)
иCache.asMap().put(K, V)
), но не операциями над представлениями коллекцииCache.asMap
.
Очевидно, что второй способ итерации, о котором я говорил, reset время доступа, но я хотел бы знать, что поведение использует первый способ.