我使用带有 Memcached 的 NHibernate 作为二级缓存,并且一直对 cache.use_minimal_puts
配置选项感到好奇。
根据文档:
需要明确的是,我没有在集群环境中运行 Memcached,但它确实在远程机器上运行。另一个需要考虑的因素可能是读取和写入 Memcached 的速度是否存在重大差异。
在这种情况下,我会从启用 cache.use_minimal_puts
中受益吗?
最佳答案
我没有 NHibernate 的经验,但在 Hibernate 中使用过二级缓存,我被告知相同的概念适用于两者。
提供参数 hibernate.cache.use_ 背后的基本思想
minimum_puts 是在 hibernate 将一个对象放入缓存之前,它首先检查二级缓存是否已经存在该对象,如果没有,则只放在那里。
当从缓存读取数据比数据更新成本低时,这将很有帮助 ONLY 。这就是文档对以下内容的含义
非常适合这种优化的情况是集群中的复制。
如果您使用集群,那么 put 操作非常昂贵,因为它会在集群缓存的情况下激活缓存复制监听器。如果你不使用集群,那么这个 put 操作相对来说非常便宜。
即使在集群的情况下,也可能存在依赖于实体失效的缓存提供程序,而不是复制对它们所做的更改。在这种情况下,此参数也将毫无用处。
影响性能的一个因素是 Memcache 使用的复制(同步或异步)类型。我没有使用过 MemCache,但 EhCache 支持这两种模型。
因此,在您的情况下,因为您是 NOT 使用集群,尽管缓存位于远程进程上,但我严重怀疑将此参数设置为 true 是否会带来任何性能优势。
关于hibernate - NHibernate 和 Memcached - 应该启用 use_minimal_puts 吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12109864/