У меня есть кэш со всеми сведениями о клиентах, которые ежедневно загружаются с db. Но перед загрузкой ежедневных данных клиента мне нужно удалить все предыдущие записи в кеше.Java Guava Cache: Как очистить все записи кэша?
В настоящее время я делаю:
public enum PeriodicUpdater {
TIMER;
private final AtomicBoolean isPublishing = new AtomicBoolean(false);
private final long period = TimeUnit.DAYS.toMillis(1);
@Autowired
@Qualifier("TestUtils") @Setter
private TestUtils testUtils;
public synchronized boolean initialize() {
return initialize(period, period);
}
boolean initialize(long delay, long period) {
if (isPublishing.get()) {
return false;
}
TimerTask task = new TimerTask() {
@Override public void run() {
try {
String path = getFile();
if(TestUtils.getFileNameCache().getIfPresent(path) == null) {
TestUtils.setFileNameCache(testUtils.buildFileCache(path));
}
} catch (Exception e) {
log.warn("Failed!", e);
}
}
};
Timer timer = new Timer("PeriodicUpdater", true); // daemon=true
timer.schedule(task, delay, period);
isPublishing.set(true);
return true;
}
}
Я использую кэш здесь:
public class TestUtils {
private static Cache<String, Map<String, List<String>>> fileCache = CacheBuilder
.newBuilder()
.expireAfterWrite(4, TimeUnit.DAYS)
.build();
public TestUtils() {
String path = getFile();
fileNameCache = buildFileCache(path);
}
public Cache<String, String> buildFileCache(String path) {
Cache<String, String> fileList = CacheBuilder
.newBuilder()
.expireAfterWrite(4, TimeUnit.DAYS)
.build();
fileList.put(path, new Date().toString());
return fileList;
}
/* doing some stuff with the cache */
}
Является ли это правильно делать? Я не вижу, как кеш очищается. Может ли кто-нибудь исправить меня, если я ошибаюсь?
'Cache' имеет метод' invalidateAll(), который очищает все записи. Я не вижу, чтобы вы это называли. – shmosel
Поскольку вы используете библиотеку google, я отброшу это примечание на [горизонтальное выравнивание] (https://google.github.io/ styleleguide/javaguide.html # s4.6.3-horizontal-alignment) из руководства по стилю Java в Google. – shmosel
Использование библиотеки google и принятие стиля кодирования Google не имеют отношения к делу. (Хотя я нашел горизонтальное выравнивание OP тоже немного тревожным: P) –