我有一个安装了几个桶设置的Membase服务器,我正在寻找一个很好的教程或如何使用它作为第二级缓存与NHibernate的例子。NHibernate和Memcached - 教程/例子
我对示例配置的样子感兴趣,如果我在代码中需要做什么,或者如果我可以从我的NHibernate映射中处理它,我感兴趣。
感谢您的任何帮助。
我有一个安装了几个桶设置的Membase服务器,我正在寻找一个很好的教程或如何使用它作为第二级缓存与NHibernate的例子。NHibernate和Memcached - 教程/例子
我对示例配置的样子感兴趣,如果我在代码中需要做什么,或者如果我可以从我的NHibernate映射中处理它,我感兴趣。
感谢您的任何帮助。
在你的映射文件,则需要包括属性:
<class name="ClassName" table="Table">
<cache usage="read-write" />
<!-- SNIP -->
</class>
选项包括读写(读取已提交隔离),非严格读写(即很少写的对象,更好的性能,但增加陈旧数据的机会)或只读(永不改变的数据)。
然后,在您的网页(或应用)的配置,你需要一个部分配置的memcached:
<configuration>
<configSections>
<!-- SNIP -->
<section name="memcache" type="NHibernate.Caches.MemCache.MemCacheSectionHandler,NHibernate.Caches.MemCache" />
</configSections>
<memcache>
<memcached host="127.0.0.1" port="11211" weight="2" />
</memcache>
<!-- SNIP -->
</configuration>
最后,在你的会话工厂配置一定要使用:
<hibernate-configuration>
<session-factory>
<!-- SNIP -->
<property name="expiration">300</property> <!--memcache uses seconds -->
<property name="cache.provider_class">NHibernate.Caches.MemCache.MemCacheProvider,NHibernate.Caches.MemCache</property>
<property name="cache.use_second_level_cache">true</property>
<property name="cache.use_query_cache">false</property> <!-- true if you want to cache query results -->
</session-factory>
</hibernate-configuration>
当然您将需要下载并引用适当版本的NHibernate.Caches的dll以获得正确的缓存提供程序。 memcached也依赖于ICSharpCode.SharpZipLib和Memcached.ClientLibrary(下载中包含s/b)
如果您使用流畅的NHibernate,会话的安装链中有一个.Cache方法工厂,你可以使用,虽然有些属性需要通过调用.ExposeConfiguration手动设置。
我发现这个例子不完整。首先,您必须在某处安装Memcached服务器(如果您想在Windows上作为服务安装,请参阅http://xrigher.info/php/how-to-install-memcache-on-windows上的部分说明-7-x64的与-瓦帕/)。当添加Memcached客户端二进制文件时,我发现3.2的二进制文件对log4net.dll有依赖性,所以我必须将其与Memcached客户端二进制文件一起复制。另外,添加过期密钥会在我的项目中生成错误 – Mario 2012-04-11 19:33:45