Guava provides no way to refresh the cache in bulk, but you can schedule a periodic refresh yourself:
LoadingCache<K, V> cache = CacheBuilder.newBuilder()
.refreshAfterWrite(15, TimeUnit.MINUTES)
.maximumSize(100)
.build(new MyCacheLoader());
for (K key : cache.asMap().keySet()) {
cache.refresh(key);
}
But in that case you may want to override the CacheLoader.reload(K, V)
method in MyCacheLoader
so it performs asynchronously.
As for the second question, no, you cannot set a per-entry expiration in Guava.