zoukankan      html  css  js  c++  java
  • ASP.NET使用Memcached高缓存实例(初级教程)

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached作为缓存技术的解决方案,已经是众所周知了;现在很多WEB应用都在使用它——包括一些知名的网站。若你还不知道这些,请在阅读之前先了解一下。
            在ASP.NET中使用Memcached,有很多文章都有介绍,以下是我个人的使用经验。
            一,准备
            你需要有一下软件:
           VS.NET(05/08)
           SQLSERVER
           memcached服务器端以及客户端类库(开源软件,下载即可)
    其中,客户端类库包括以下几个DLL:
           Memcached.ClientLibrary.dll
           ICSharpCode.SharpZipLib.dll
           log4net.dll
           二,安装memcached服务器端
           将memcached.exe复制到任意目录下,如 c:,在命令行输入:
    memcached.exe -d install
    memcached将作为一个服务常驻系统内存了
          三,建立ASP.NET工程
         创建一个ASP.NETWEB项目,命名为MMCWEB,添加以上提到的几个客户端类库的引用。
         四,配置
         memcached使用了log4net,所以我们先配置log4net
    在web.config里找到configSections节点,添加以下内容
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />

    再在configSections节点之外,增加以下内容:
    <log4net>
            <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
                <param name="File" value="LogFiles/"/>
                <param name="AppendToFile" value="true"/>
                <param name="MaxSizeRollBackups" value="10"/>
                <param name="StaticLogFileName" value="false"/>
                <param name="DatePattern" value="yyyy-MM-dd&quot;.txt&quot;"/>
                <param name="RollingStyle" value="Date"/>
                <layout type="log4net.Layout.PatternLayout">
                    <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger %ndc - %message%newline"/>
                </layout>
            </appender>
            <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
                <layout type="log4net.Layout.PatternLayout">
                    <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger %ndc - %message%newline" />
                </layout>
            </appender>
            <root>
                <level value="ALL" />
                <appender-ref ref="RollingLogFileAppender" />
                <appender-ref ref="ConsoleAppender" />
            </root>
            <logger name="Memcached.ClientLibrary">
                <level value="WARN" />

            </logger>
        </log4net>
    启动调试,若没出现配置的出错提示,并且在网站目录下有文件夹LogFiles,就说明log4net配置成功了。

    五,初始化SockIOPool
    SockIOPool是什么东东?SockIOPool是Memcached客户端提供的一个套接字连接池,通俗讲,就是与Memcached服务器端交换数据的对象。SockIOPool在应用程序启动时初始化一次就可以了,我把这个工作放在 GLOBAL.ASAX.CS的Application_Start方法里
    char[] separator = { ',' };
                string[] serverlist = ConfigurationManager.AppSettings["Memcached.ServerList"].Split(separator);

                // initialize the pool for memcache servers
                try
                {
                    SockIOPool pool = SockIOPool.GetInstance();
                    pool.SetServers(serverlist);

                    pool.InitConnections = 3;
                    pool.MinConnections = 3;
                    pool.MaxConnections = 50;

                    pool.SocketConnectTimeout = 1000;
                    pool.SocketTimeout = 3000;

                    pool.MaintenanceSleep = 30;
                    pool.Failover = true;

                    pool.Nagle = false;
                    pool.Initialize();
                }
                catch (Exception err)
                {
                    //这里就可以用Log4Net记录Error啦!
                }

    注意AppSettings["Memcached.ServerList"]是在WEB.CONFIG里设置的,所以WEB.CONFIG的appSettings的子节点里需要有以下一行
    <add key="Memcached.ServerList" value="127.0.0.1:11211"/>
    启动调试服务器,若没有出错的日志记录,说明IO连接池已经开辟成功。
            六,使用Memcached
           终于进入正题了,不过使用之前,我们还需要准备一些数据。
          创建一个实体类People,并加上Serializable属性!!!
          对应的数据库里,增加一张表,字段对应实体类,插入一些测试数据。持久层和业务层的设计就略过了,他们负责向提供一些数据,返回类型可自定,若ILIST,DATASET。
         Memcached使用起来就很简单了,比如后台检索出一组People类型的数据,放在一个叫peopleList的arraylist里,而且这个arraylist要频繁使用,只需要这样
    MemcachedClient mc = new MemcachedClient();
    mc.EnableCompression = true;
    mc.Set(key, peopleList);    
             上面的key是用来访问这个arraylist的键,Memcached里的数据都是保存为键-值对的。
    一旦mc.KeyExists(key)为TRUE,就用return mc.Get(key) as ArrayList提取数据,删除时,使用 return mc.Delete(key);等等。可以自己琢磨了。

             以上只是演示,其实数据缓存是一项复杂而繁琐的工作,不仅需要后台代码的分层优化,也需要数据库对大数据量访问的策略和调优。

  • 相关阅读:
    Leetcode 191.位1的个数 By Python
    反向传播的推导
    Leetcode 268.缺失数字 By Python
    Leetcode 326.3的幂 By Python
    Leetcode 28.实现strStr() By Python
    Leetcode 7.反转整数 By Python
    Leetcode 125.验证回文串 By Python
    Leetcode 1.两数之和 By Python
    Hdoj 1008.Elevator 题解
    TZOJ 车辆拥挤相互往里走
  • 原文地址:https://www.cnblogs.com/zjoch/p/1771974.html
Copyright © 2011-2022 走看看