zoukankan      html  css  js  c++  java
  • 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技术交流

    微信公众号:“专卓”;因为专业,所以卓越!可扫描左侧二维码关注。
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    游标cursor
    SQL: EXISTS
    LeetCode Reverse Integer
    LeetCode Same Tree
    LeetCode Maximum Depth of Binary Tree
    LeetCode 3Sum Closest
    LeetCode Linked List Cycle
    LeetCode Best Time to Buy and Sell Stock II
    LeetCode Balanced Binary Tree
    LeetCode Validate Binary Search Tree
  • 原文地址:https://www.cnblogs.com/oorz/p/4087358.html
Copyright © 2011-2022 走看看