В чем разница между CacheStoreMode USE и REFRESH

Javadocs для CacheStoreMode различаются в точке, которую я не могу понять:

Javadocs для USE Режим:

Вставлять / обновлять данные объекта в кэш при чтении из базы данных и при фиксации в базе данных: это поведение по умолчанию. Не вызывает обновления уже кэшированных элементов при чтении из базы данных.

Javadocs для REFRESH Режим отличается в последнем предложении:

Принудительное обновление кэша для элементов, считанных из базы данных.

Когда обновляется существующий экземпляр кэшированной сущности при чтении из базы данных, это обычно включает перезапись существующих данных. Так в чем же разница между принудительным обновлением и не принудительным обновлением в этом контексте?

Спасибо.

2 ответа

Насколько я знаю:

  • CacheStoreMode.USE должен использоваться, если данный EntityManagerFactory имеет монопольный доступ на запись к базовой базе данных, таким образом, это означает, что нет никакой возможности для устаревшего экземпляра объекта, хранящегося в общем кэше.
  • CacheStoreMode.REFRESH должен быть включен, если базовая база данных может быть доступна нескольким коммиттерам (т.е. экземплярам EntityManagerFactory, приложениям в разных JVM, внешним источникам JDBC), таким образом, экземпляр сущности, хранящийся в общем кэше, может устареть.

Поскольку CacheStoreMode.USE не принудительно обновляет уже кэшированные объекты при чтении из базы данных, CacheStoreMode.REFRESH делает.

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

В моем приложении это тот же случай (но не с использованием какой-либо стратегии кэширования), где мы должны загружать все данные каждый раз; поскольку он изменяется неявным образом посредством обмена сообщениями из внешней системы, иначе мы будем иметь дело с устаревшими данными.

В некоторых случаях запланированные задания, внешние системы и т. Д. Могут обновлять базу данных непосредственно там. CacheStoreMode.REFRESH является целесообразным; пока для нормального случая CacheStoreMode.USE,

[Кроме этого я не могу вспомнить какие-либо другие случаи, когда это может иметь значение между этими двумя режимами]


Изменить: документация выглядит запутанным и слишком коротким, чтобы объяснить правильно. Кроме того, в случае собственных запросов, массовых обновлений и т. Д. Элементы пропускаются и не кэшируются.

CacheStoreMode.USE: В кеш помещаются только новые элементы, а не уже кэшированные.CacheStoreMode.REFRESH: Новые элементы помещаются в кэш, а уже существующие кэшированные элементы обновляются.

Другие вопросы по тегам