Как работает Spring Caching? - PullRequest
0 голосов
/ 05 мая 2018

Как аннотация @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 ​​мс, что означает, что он кэширует набор результатов. Справедливо. Но теперь, если я обновлю запись в таблице сотрудников прямо в БД и снова вызову этот метод, произойдут две вещи:

  1. Новая запись возвращается этим вызовом метода.
  2. Метод возвращается очень быстро.

Это означает, что кеш обновляется из БД каждый раз. Как работает эта синхронизация, если набор результатов возвращается из кэша?

спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...