NHibernate кэш второго уровня с внешними обновлениями

У меня есть веб-приложение, которое доступно на 99% только для чтения, с отдельным сервисом, который обновляет базу данных через определенные промежутки времени (например, каждые 10 минут). Как этот сервис может сказать приложению, что оно должно сделать недействительным свой кэш второго уровня? Это действительно важно? (На самом деле мне все равно, если у меня слишком много устаревших данных) Если я не аннулирую кэш, сколько времени требуется для обновления записей (если используется SysCache)

2 ответа

Решение

Вы можете вручную расположить кэш 2-го уровня для определенного объекта, типа объекта или коллекции.

С http://knol.google.com/k/fabio-maulo/nhibernate-chapter-16-improving/1nr4enxv3dpeq/19

Для кэша второго уровня в ISessionFactory определены методы для удаления кэшированного состояния экземпляра, всего класса, экземпляра коллекции или всей роли коллекции.

sessionFactory.Evict(typeof(Cat), catId); // выселить конкретного кота
sessionFactory.Evict(TypeOf(кат));  // выселить всех кошек
sessionFactory.EvictCollection("Eg.Cat.Kittens", catId); // выселить конкретную коллекцию котят
sessionFactory.EvictCollection("Eg.Cat.Kittens"); // выселить все коллекции котят

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

Пример:

<property name="cache.default_expiration">120</property>

Это устанавливает срок действия по умолчанию равным двум минутам, поэтому вы никогда не увидите устаревшие данные старше этого.

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