У меня есть 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 время доступа, но я хотел бы знать, что поведение использует первый способ.