Понимание спящего режима 2-го уровня - PullRequest
1 голос
/ 01 декабря 2009

** 1. ** для кэша 2-го уровня, можно только установить период ожидания, но не может принудительно обновить / очистить кэш объекта? или вставьте аннотацию @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE), например, автоматическое обновление / очистку кэша каждый раз, когда выполняется saveorupdate / mergeupdate? Что такое hibernateTemplate.flush () относится к этому?


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

1 Ответ

1 голос
/ 01 декабря 2009

1) При необходимости вы можете вручную выселить сущности из кэша 2-го уровня. SessionFactory имеет несколько методов для этой цели; некоторые выселяют один экземпляр сущности (или коллекции); другие выселяют все сущности данного класса (или имя сущности / имя роли).

Тем не менее, вы обычно не должны делать этого - Hibernate будет поддерживать кэш для вас обновленным (если вы не делаете какие-то довольно специфические вещи, такие как обновления SQL - в этом случае уточните свой вопрос).

2) Как правило, нет, кэшировать все сущности нехорошо. Обычно рекомендуется кэшировать неизменяемые объекты, а также те, которые часто загружаются / редко обновляются; при условии, что у вас их нет. Но опять же, это действительно зависит от того, что вы делаете.

Timeout - это костыль (или защита, если хотите), предназначенная для поддержания разумного размера / состояния кэша, даже если вы этого не сделаете. Хорошая стратегия кэширования не должна опираться на нее.

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