• Asp.Net Memcached安装配置使用、安全性 郑州


    Memcached安装配置使用

     一,准备
            你需要有一下软件:
           VS.NET(05/08)
           SQLSERVER
           memcached服务器端以及客户端类库(开源软件,下载即可)
    其中,客户端类库包括以下几个DLL:
           Memcached.ClientLibrary.dll
           ICSharpCode.SharpZipLib.dll

    二,Windows下的Memcache安装:
    1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached
    2. 在终端(也即cmd命令界面管理员身份安装,首先找出cmd.exe的原文件(在c:\windows\system32\cmd.exe),
    右击以管理员进入,接下来的步骤就和xp安装方法一样了)下输入 ‘c:\memcached\memcached.exe -d install’ 安装
    3. 再输入: ‘c:\memcached\memcached.exe -d start’ 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。
    4.监控
    e:\memcached\memcached.exe -p 11121 -m 64 -vv

    三,建立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连接池已经开辟成功。

    配置信息:

    1. <?xml version="1.0"?>  
        
      <!--  
        有关如何配置 ASP.NET 应用程序的详细信息,请访问  
        http://go.microsoft.com/fwlink/?LinkId=169433  
        -->  
        
      <configuration>  
        
        <!--Enyim.Caching配置(省略了Log4Net框架)   For Memcached-->  
        
        <!--<configSections>  
          <sectionGroup name="enyim.com">  
            <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" />  
          </sectionGroup>  
        </configSections>  
        <enyim.com protocol="Binary">  
          <memcached>  
            <servers>  
              <add address="127.0.0.1" port="11121"  />  
            </servers>  
            <socketPool minPoolSize="10" maxPoolSize="100" connectionTimeout="00:00:10" deadTimeout="00:02:00" />  
          </memcached>  
        </enyim.com>-->  
         
        <!--The Enyim.Caching配置 End -->  
        
        <!--MemcachedProviders的配置  -->  
        <configSections>  
        <section name="cacheProvider" type="MemcachedProviders.Cache.CacheProviderSection, MemcachedProviders"  
              allowDefinition="MachineToApplication" restartOnExternalChanges="true"/>  
        <sectionGroup name="enyim.com">  
          <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" />  
        </sectionGroup>  
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>  
        </configSections>  
        <cacheProvider defaultProvider="MemcachedCacheProvider">  
          <providers>  
            <add name="MemcachedCacheProvider"  
           type="MemcachedProviders.Cache.MemcachedCacheProvider, MemcachedProviders"  keySuffix="_MySuffix_" defaultExpireTime="2000"/>  
          </providers>  
        </cacheProvider>  
        <enyim.com>  
          <memcached>  
            <servers>  
              <!-- put your own server(s) here-->  
              <add address="127.0.0.1" port="11121" />  
            </servers>  
            <socketPool minPoolSize="10" maxPoolSize="100" connectionTimeout="00:00:10" deadTimeout="00:02:00" />  
          </memcached>  
        </enyim.com>  
        
        <log4net>  
          <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">  
            <layout type="log4net.Layout.PatternLayout">  
              <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}]- %message%newline" />  
            </layout>  
          </appender>  
          <root>  
            <priority value="WARN"/>  
            <appender-ref ref="ConsoleAppender">  
              <filter type="log4net.Filter.LevelRangeFilter">  
                <levelMin value="WARN"/>  
                <levelMax value="FATAL"/>  
              </filter>  
            </appender-ref>  
          </root>  
        </log4net>  
         
        <!--The MemcachedProviders配置 End-->  
          
        <connectionStrings>  
          <add name="ApplicationServices"  
               connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"  
               providerName="System.Data.SqlClient" />  
        </connectionStrings>  
          
          
        <system.web>  
          <compilation debug="true" targetFramework="4.0" />  
        
          <authentication mode="Forms">  
            <forms loginUrl="~/Account/Login.aspx" timeout="2880" />  
          </authentication>  
        
          <membership>  
            <providers>  
              <clear/>  
              <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"  
                   enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"  
                   maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"  
                   applicationName="/" />  
            </providers>  
          </membership>  
        
          <profile>  
            <providers>  
              <clear/>  
              <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/>  
            </providers>  
          </profile>  
        
          <roleManager enabled="false">  
            <providers>  
              <clear/>  
              <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />  
              <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />  
            </providers>  
          </roleManager>  
        
        </system.web>  
        
          
          
         
        <system.webServer>  
           <modules runAllManagedModulesForAllRequests="true"/>  
        </system.webServer>  
      </configuration>  


    六,使用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);等等。可以自己琢磨了。

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

    Memcached 的安全性

    如果你了解了 Memcached 的工作流程, 你可能已经注意到了,在访问缓存的过程中,没有任何权限控制的相关流程。如果你的数据不是非常重要的,你大可不必担心这方面的安全问题。如果你需要的话,以下几点可以协助你更完全的使用它:

    使用唯一的 Key:因为在 Memcached 中的数据是以一个大的数组形式存在的,所以你应该使用唯一的 key。访问你的数据的唯一办法就是通过你保存数据时的 key,除此之外再没有其它可查询的办法。

    保证你的 Memcached 器安全: 因为 Memcached 本身并没有身份验证机制,所以对 Memcached 的服务器查询,都应该通过防火墙进行。你可以在防火墙上设定规则,哪些服务器是允许被访问的,哪些是不允许被访问的。

    加密你的数据: 你可以将数据和 Key 通过加密的方式保存在 Memcached 中。 这需要花费一些额外的 CPU 时间,但是为了你的数据安全,在情况允许的情况下,这个方法值得你去尝试。

    Q群:NET CORE技术交流(444036561)NET CORE技术交流

    微信公众号:“专卓”;因为专业,所以卓越!可扫描左侧二维码关注。
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    堆排序回顾
    动画函数封装
    mouseenter 和mouseover的区别
    元素滚动 scroll 系列
    元素可视区 client 系列
    元素偏移量 offset 系列
    JS执行机制
    BOM
    常用键盘事件
    常用鼠标事件
  • 原文地址:https://www.cnblogs.com/oorz/p/4087358.html
Copyright © 2020-2023  润新知