Эта стратегия гарантирует строгую согласованность, которой она достигает, используя «мягкие» блокировки: при обновлении кэшируемого объекта в кеше также сохраняется мягкая блокировка, которая освобождается после фиксации транзакции. Все одновременные транзакции, которые получают доступ к программно-заблокированным записям, будут получать соответствующие данные непосредственно из базы данных.
реальная разница междуnonstrict-read-write
а такжеread-write
? Я могу читать документы ehcache и Hibernate, но, насколько я вижу, они говорят только, что «чтение и запись лучше, если вы делаете обновления». Я нахожу это неудовлетворительным.
У меня может быть проблема с долгоживущей кэшированной коллекцией, настроенной так:
<cache name="trx.domain.Parent.children" maxElementsInMemory="5000"
eternal="false" overflowToDisk="false" timeToIdleSeconds="1200"
timeToLiveSeconds="1800">
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true, replicateUpdatesViaCopy=false, replicateRemovals=true" />
<set name="children" lazy="false" inverse="true">
<cache usage="nonstrict-read-write"/>
<key column="callout_id" />
<one-to-many class="Child" />
</set>
Что именно происходит при обновлении коллекции на узле, где происходит обновление, и других? В чем разница междуnonstrict-read-write
а такжеread-write
Вот? Возможно ли, что узел будет использовать свою устаревшую 10-минутную версию из кэша?
Обратите внимание на длительные тайм-ауты и асинхронную репликацию.