一、准备工作

      【1】根据操作系统(位数)选择下载相应版本的MemCache,

      MemCache的下载和安装,参看:

       http://www.cnblogs.com/easy5weikai/p/3760677.html

 

       【2】第三方MemCache缓存适配器,下载地址:

        http://sourceforge.net/projects/nhcontrib/files/NHibernate.Caches/

        根据版本号自行下载。

 

特别说明:

1.一定要版本一致

  MemCache缓存适配器写本文的时候最高版本是:NHCH-3.2.0.GA-bin(不支持目前高版本的NhibernateNhibernate (版本3.3.1.4000))

     下载地址:http://sourceforge.net/projects/nhcontrib/files/NHibernate.Caches/

 

  1-1 它依赖的Nhibernate的版本是NHibernate-3.2.0.GA-bin,下载地址:

     http://sourceforge.net/projects/nhibernate/files/NHibernate/

  1-2 它依赖的Log4net的版本是log4net-1.2.10

 

2.MemCache缓存依赖Log4net的版本是log4net-1.2.10

    只要添加对log4net程序集的引用即可,不一定要在app/web.config文件中配置<log4net>节点。

 

-------------------

        其他资料 :

                http://sourceforge.net/projects/nhcontrib/files/

 

二、开始动手搭建NHibernate二级缓存:第三方MemCache缓存

----------------------------------------------------------------------------------------

第一步:在应用程序配置文件(app.config or web.config)中添加

  <configSections>
    <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System,
                     Version=3.2.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4" />
    <section  name ="memcache"  type ="NHibernate.Caches.MemCache.MemCacheSectionHandler,NHibernate.Caches.MemCache"   />
  </configSections>


  <memcache>
    <memcached  host ="127.0.0.1"  port ="11211"  weight ="2"   />
  </memcache >

 

第二步:DomainModel层的实体映射配置文件(如:Cusomer.hbm.xml)的配置

           和前面的配置一模一样,请查看:

           http://www.cnblogs.com/easy5weikai/p/3759277.html

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
                   namespace="Model" 
                   assembly="Model" 
                    default-lazy="true">
  
  <class name="Model.Customer, Model"
         table="Customer"
         discriminator-value="0" lazy="true">
    <!--1.这个不是必须的,因为在nhibernate.cfg.xml文件中已经有了一个总配置
        2.cache标签必须在id标签前面
    -->
    <cache usage="read-write"/>
    <!--unsaved-value="0" 主键表中不需要定义,而是需要在子表中定义-->
    <id name="CustomerId"
        column="CustomerId"
        type="int" 
        unsaved-value="0">
      <generator class="native" />
      <!-- unsaved-value used to be null and generator was increment in h2.0.3 -->
    </id>
。。。。。。
    <set name="Orders" table="Order"  lazy="false"
         generic="true"
          inverse="false" cascade="all">
      <!--二级缓存策略-->
      <cache usage="read-write"/>
      <key column="CustomerId" foreign-key="FK_CustomerOrders"/> 
      <one-to-many class="Model.Order,Model"/>
    </set>
  </class>
</hibernate-mapping>

 

第三步:添加如下程序集的引用:

1.NHibernate.Caches.MemCache.dll,

2.Memcached.ClientLibrary.dll,

3.ICSharpCode.SharpZipLib.dll

4.log4net.dll

 

第四步:在hibernate.cfg.xml文件中添加:

    <!--=======加入Nhibernate第三方二级缓存的memcache的配置===开始=============================-->
    <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" >true</property>
    <property name ="cache.default_expiration" >300</property>
    <property name ="cache.region_prefix" >Demo</property>
    <!--=======加入Nhibernate第三方二级缓存的memcache的配置===结束=============================-->
    
    <!--实体类所在的程序集-->
    <mapping assembly="Model"/>
       <!--3.配置映射的二级缓存-->
    <class-cache class="Model.Customer,Model" usage="read-write"/>
    <!--<collection-cache collection ="集合名称" region="默认集合名称"
                      usage="read-write"/>-->

 

第五步:应用程序配置文件(app.config or web.config)中添加log4net的节点配置(可选,可不用配置):

           

  <configSections>
    <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System,
                     Version=3.2.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4" />
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
    <section  name ="memcache"  type ="NHibernate.Caches.MemCache.MemCacheSectionHandler,NHibernate.Caches.MemCache"   />
  </configSections  

<log4net>
    <!--定义输出到文件中-->
    <appender name="LogFileAppender"  type="log4net.Appender.RollingFileAppender,log4net">
      <!--<appender name="LogFileAppender" type="log4net.Appender.FileAppender">-->
      <!--定义文件存放位置-->
      <file value="log4netfile.log" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="yyyyMMdd-HH:mm:ss" />
      <layout type="log4net.Layout.PatternLayout">
        <!--输出格式-->
        <!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
        <conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline" />
      </layout>
    </appender>
    <!--定义输出到控制台命令行中-->
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <!--定义输出到windows事件中-->
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <!--定义输出到数据库中,这里举例输出到Access数据库中,数据库为C盘的log4net.mdb-->
    <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">
      <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb" />
      <commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" />
      <!--定义各个参数-->
      <parameter>
        <parameterName value="@logDate" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logLevel" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
    </appender>
    <!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。-->
    <root>
      <!--文件形式记录日志-->
      <appender-ref ref="LogFileAppender" />
      <!--控制台控制显示日志-->
      <appender-ref ref="ConsoleAppender" />
      <!--Windows事件日志-->
      <appender-ref ref="EventLogAppender" />
      <!-- 如果不启用相应的日志记录,可以通过这种方式注释掉
      <appender-ref ref="AdoNetAppender_Access" />
      -->
    </root>
  </log4net>

 

 大功搞成。当然要确保Mecache服务已经安装并开启了。

最后看下各个文件的最终的配置:

app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System,
                     Version=3.2.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4" />
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
    <section  name ="memcache"  type ="NHibernate.Caches.MemCache.MemCacheSectionHandler,NHibernate.Caches.MemCache"   />
  </configSections>
  <log4net>
    <!--定义输出到文件中-->
    <appender name="LogFileAppender"  type="log4net.Appender.RollingFileAppender,log4net">
      <!--<appender name="LogFileAppender" type="log4net.Appender.FileAppender">-->
      <!--定义文件存放位置-->
      <file value="log4netfile.log" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="yyyyMMdd-HH:mm:ss" />
      <layout type="log4net.Layout.PatternLayout">
        <!--输出格式-->
        <!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
        <conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline" />
      </layout>
    </appender>
    <!--定义输出到控制台命令行中-->
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <!--定义输出到windows事件中-->
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <!--定义输出到数据库中,这里举例输出到Access数据库中,数据库为C盘的log4net.mdb-->
    <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">
      <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb" />
      <commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" />
      <!--定义各个参数-->
      <parameter>
        <parameterName value="@logDate" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logLevel" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
    </appender>
    <!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。-->
    <root>
      <!--文件形式记录日志-->
      <appender-ref ref="LogFileAppender" />
      <!--控制台控制显示日志-->
      <appender-ref ref="ConsoleAppender" />
      <!--Windows事件日志-->
      <appender-ref ref="EventLogAppender" />
      <!-- 如果不启用相应的日志记录,可以通过这种方式注释掉
      <appender-ref ref="AdoNetAppender_Access" />
      -->
    </root>
  </log4net>

  <memcache>
    <memcached  host ="127.0.0.1"  port ="11211"  weight ="2"   />
  </memcache >
</configuration>
View Code

相关文章:

  • 2021-09-03
  • 2021-11-10
  • 2022-01-19
  • 2021-09-21
  • 2021-06-16
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-09-16
  • 2022-12-23
  • 2021-07-17
  • 2022-01-14
相关资源
相似解决方案