具有外部更新的NHibernate二级缓存

时间:2010-06-06 20:14:52

标签: nhibernate caching syscache

我有一个99%只读的Web应用程序,它有一个单独的服务,可以按特定的时间间隔更新数据库(比如每10分钟)。该服务如何告诉应用程序使其二级缓存失效?它真的很重要吗? (我实际上并不关心我是否有过多的陈旧数据)如果我没有使缓存失效需要多长时间来更新记录(如果使用SysCache)

2 个答案:

答案 0 :(得分:9)

您可以手动处理特定实体,实体类型或集合的二级缓存。

来自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

答案 1 :(得分:4)

如果您对可能存在过时数据感到满意,只需将默认过期时间设置为您认为合适的内容即可,并且您将被设置。

示例:

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

这会将默认过期时间设置为两分钟,因此您永远不会看到比此更早的陈旧数据。