2011-04-19 11 views
10

Tengo el servidor de Membase instalado con una configuración de dos cubos y estaba buscando un buen tutorial o ejemplo de cómo usar esto como el segundo nivel de caché con NHibernate.NHibernate y Memcached - Tutorial/Ejemplo

Me interesa saber cómo sería una configuración de muestra y si hay algo que deba hacer en el código o si puedo manejarlo todo desde mis asignaciones de NHibernate.

Gracias por cualquier ayuda.

Respuesta

14

En sus archivos de mapeo, que tendrá que incluir la propiedad:

<class name="ClassName" table="Table"> 
    <cache usage="read-write" /> 
    <!-- SNIP --> 
</class> 

Las opciones son de lectura y escritura (aislamiento de lectura confirmada), leer no estricta-escritura (objetos que rara vez se escriben, mejor rendimiento, pero mayor posibilidad de datos obsoletos), o de solo lectura (datos que nunca cambian).

Luego, en su web (o aplicación) config necesita una sección para configurar 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> 

Por último, en la configuración de fábrica de sesiones asegúrese de usar:

<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> 

Por supuesto Deberá descargar y hacer referencia a un dll desde la versión correspondiente de NHibernate.Caches para obtener el proveedor de caché correcto. El memcached también depende de ICSharpCode.SharpZipLib y Memcached.ClientLibrary (s/b incluido en la descarga)

Si usa NHibernate con fluidez, hay un método .Cache en la cadena de configuración para una sesión de fábrica que puede usar, aunque algunas de las propiedades se deben configurar manualmente mediante una llamada a .ExposeConfiguration.

+0

Encontré este ejemplo incompleto. En primer lugar, debe instalar el servidor de Memcached en algún lugar (si desea instalarlo como un servicio en un cuadro de Windows, consulte parte de las instrucciones en http://xrigher.info/php/how-to-install-memcache-on-windows -7-x64-con-wamp /). Al agregar los binarios del cliente Memcached, encontré que los binarios para 3.2 tienen una dependencia en log4net.dll, así que tuve que copiar eso junto con los binarios del cliente de Memcached. Además, agregar la clave de vencimiento genera un error en mi proyecto – Mario