2011-04-19 51 views
10

我有一个安装了几个桶设置的Membase服务器,我正在寻找一个很好的教程或如何使用它作为第二级缓存与NHibernate的例子。NHibernate和Memcached - 教程/例子

我对示例配置的样子感兴趣,如果我在代码中需要做什么,或者如果我可以从我的NHibernate映射中处理它,我感兴趣。

感谢您的任何帮助。

回答

14

在你的映射文件,则需要包括属性:

<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手动设置。

+0

我发现这个例子不完整。首先,您必须在某处安装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