NHibernate кэш второго уровня с внешними обновлениями - PullRequest
4 голосов
/ 07 июня 2010

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

Ответы [ 2 ]

9 голосов
/ 07 июня 2010

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

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

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

sessionFactory.Evict(typeof(Cat), catId); //evict a particular Cat
sessionFactory.Evict(typeof(Cat));  //evict all Cats
sessionFactory.EvictCollection("Eg.Cat.Kittens", catId); //evict a particular collection of kittens
sessionFactory.EvictCollection("Eg.Cat.Kittens"); //evict all kitten collections
4 голосов
/ 07 июня 2010

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

Пример:

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

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

...