В чем разница между 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
: Новые элементы помещаются в кэш, а уже существующие кэшированные элементы обновляются.