Как аннотация @Cacheable уведомляется об изменениях в базе данных. Например: если я кэширую результат вызова функции CRUDRepository.findAll () путем аннотирования вызова функции с помощью @Cacheable, результат сохраняется в именованном кэше. Кэш, однако, продолжает обновляться с изменениями БД. Рассмотрим приведенный ниже пример:
@Cacheable(value = "employee", key = "#id")
public Iterable<Employee> getAllEmployees(){
long startTime = System.currentTimeMillis();
Iterable<Employee> itr = employeeEntityRepository.findAll();
long stopTime = System.currentTimeMillis();
System.out.println("Time-->" + (stopTime - startTime));
return itr;
}
Когда этот метод вызывается в первый раз, он занимает 300 мс, а во второй раз - едва ли 5 мс, что означает, что он кэширует набор результатов. Справедливо. Но теперь, если я обновлю запись в таблице сотрудников прямо в БД и снова вызову этот метод, произойдут две вещи:
- Новая запись возвращается этим вызовом метода.
- Метод возвращается очень быстро.
Это означает, что кеш обновляется из БД каждый раз. Как работает эта синхронизация, если набор результатов возвращается из кэша?
спасибо.