2

我们有一个 Web 应用程序,我们注意到以下错误有很多问题:

NHibernate.Cache.ReadWriteCache - An item was expired by the cache while it was locked (increase your cache timeout)

这些行后面是应该持久化到 DB 的随机实体。有时,这些似乎无法持久,或者缺少某些应该设置的字段,让我们非常头疼。

最奇怪的是,如果关闭二级缓存,我们仍然会看到这一点,这让我感到惊讶。运行它的服务器有 64 GB RAM,使用量通常在 55-60 GB 左右,因为它托管多个站点。

当二级缓存应该关闭时,为什么我会看到这个?一级缓存不应该像这样过期,对吧?我还尝试将某些实体的 CachePriority 设置为永不过期,但它们仍然显示在日志中。

我究竟做错了什么?我被误导了吗?

4

1 回答 1

2

对于启用了读/写缓存但未在配置中设置二级缓存提供程序的实体,我们收到了相同的消息。

在 NH 配置文件中设置提供程序足以消除该消息,即使该提供程序的查询和二级缓存已禁用(use_second_level_cache = off,use_query_cache = off)。

我们使用 memcache,当我们不想要二级缓存但同时避免日志消息时,这就是我们的 NH 配置文件的样子:

<property name="cache.provider_class">NHibernate.Caches.MemCache.MemCacheProvider,NHibernate.Caches.MemCache</property>
<property name="cache.use_second_level_cache">false</property>
<property name="cache.use_query_cache">false</property>
于 2014-10-04T17:53:13.743 回答