Dan*_*anP 12 nhibernate memcached caching hibernate second-level-cache
我使用NHibernate和Memcached作为二级缓存,并且一直对cache.use_minimal_puts配置选项感到好奇.
根据文件:
hibernate.cache.use_minimal_puts:优化二级缓存操作以最小化写入,但代价是更频繁的读取.此设置对于群集缓存最有用,并且在Hibernate3中,默认情况下为群集缓存实现启用.
为了清楚起见,我没有在集群环境中运行Memcached,但它确实在远程计算机上运行.另一个需要考虑的因素可能是读取和写入Memcached之间的速度是否存在任何重大差异.
cache.use_minimal_puts在这种情况下,我能从中受益吗?
Sha*_*dra 16
我没有NHibernate的经验,但已经在Hibernate中使用二级缓存,我被告知相同的概念适用于两者.
提供参数hibernate.cache.use_minimal_puts背后的基本思想是,在hibernate将一个对象放入缓存之前,它首先检查二级缓存是否已经存在该对象,如果不存在则只放在那里.
仅当从缓存中读取的数据比数据更新便宜时,这才有用.这就是文档对以下内容的意义
...优化二级缓存操作以最小化写入,代价是更频繁的读取.
适合这种优化的情况是群集中的复制.
如果您正在使用群集,那么put操作非常昂贵,因为它会在群集缓存的情况下激活缓存复制侦听器.如果你没有使用群集,那么这个put操作相对来说非常便宜.
即使在群集的情况下,也可能存在依赖于实体失效而不是复制对它们所做的更改的缓存提供者.在这种情况下,这个参数也没用.
可能妨碍性能的一个因素是Memcache使用的同步或异步复制.我没有使用过MemCache,但EhCache支持这两种模式.
因此,在您的情况下,由于您不使用群集,虽然缓存位于远程进程上,但我非常怀疑通过将此参数设置为true可以获得任何性能优势.