C#中缓存数据库Memcached的基本使用方法

来源:互联网 发布:光伏数据采集器怎么用 编辑:程序博客网 时间:2024/06/06 13:11

在本博客中,只是为大家展示一下Memcached的安装以及基本使用方法,过于深奥的知识点,在本篇文章中不会提到了.

首先把Memcached的下载链接地址分享给大家:  http://download.csdn.net/detail/hao930826/9406266

解压后请根据自己的电脑系统选择不同的版本进行使用,这里面包括了64位和32位的数据库版本。这里我只拿64位的版本进行举例说明了。

安装的方法需要使用控制台进行安装:

这里我把文件都放到了D盘中:


控制台中这样输入即可,完成安装操作:


安装之后,需要开启相关的服务才能正常使用:

接下来输入:


以上步骤完成后,去计算机的服务里面去查看是否开启成功了:

开始->控制面板->管理工具->服务,在里面找到这项:


开启之后,就能正常使用了。

除此之外,扩展一些就说配置Memcached数据库的端口号和最大使用内存等问题:

其实也很简单只要在上面安装步骤,也就是在控制台中输入:  memcached.exe -p 11211 -m 64就是配置了端口号和最大内存,Memcached数据库的默认端口号为11211其实不用改就可以了。

为了验证我们安装的Memcached是否可以正常使用,接下来我们在控制台中继续输入接下来的语句:


因为我是把数据库安装在了本地计算机中,所以这里面的IP地址我只要输入这个就好了,如果说你把数据库安装在了服务器上面的话,这个IP地址就要写服务器的IP地址了,后面的11211就代表了Memcached的端口号,这个也是看实际情况而定的,默认是11211,所以我只要输入11211就好了。输入之后点击回车继续。

之后会来到一个空白页中,在这里我们使用键盘,点击Ctrl+"]",如果看见下面的内容,就代表了你安装的Memcached能够正常使用了


完成之后,我们就开始进行程序的演示了:首先分享个连接给大家,这里面包括了实例程序和相关的dll文件,在下面我们会使用到的:

http://download.csdn.net/detail/hao930826/9406257

1.首先我们要在引用中导入一下的dll文件,这些文件在上面下载后的文件中都有,在这里我们导入:


2.因为我创建的是web程序,很重要的一个步骤就是要写相关的配置文件内容:

控制台应用程序的配置文件内容:
<configuration>
    <configSections>
      <sectionGroup name="enyim.com">
        <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" />
      </sectionGroup>
      <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" />
    </configSections>
    <enyim.com>
      <memcached>
        <servers>
          <!-- 注意这里写你自己的IP地址和数据库的端口号-->
          <add address="127.0.0.1" port="11211" />


        </servers>
        <socketPool minPoolSize="10" maxPoolSize="100" connectionTimeout="00:00:10" deadTimeout="00:02:00" />
      </memcached>
    </enyim.com>
    <memcached keyTransformer="Enyim.Caching.TigerHashTransformer, Enyim.Caching">
      <servers>
        <add address="127.0.0.1" port="11211" />


      </servers>
      <socketPool minPoolSize="2" maxPoolSize="100" connectionTimeout="00:00:10" deadTimeout="00:02:00" />
    </memcached>
  </configuration>




Web Application的配置文件内容
<configuration>
  <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"/>
    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
        <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
          <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
          <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
          <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
          <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
        </sectionGroup>
      </sectionGroup>
    </sectionGroup>
  </configSections>
  <!--MemcachedProviders的配置  -->
  <system.webServer>
    <directoryBrowse enabled="true"/>
      <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="ScriptModule"/>
      <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </modules>
    <handlers>
      <remove name="WebServiceHandlerFactory-Integrated"/>
      <remove name="ScriptHandlerFactory"/>
      <remove name="ScriptHandlerFactoryAppServices"/>
      <remove name="ScriptResource"/>
      <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add name="ScriptResource" verb="GET,HEAD" path="ScriptResource.axd" preCondition="integratedMode" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </handlers>
  </system.webServer>
  <cacheProvider defaultProvider="MemcachedCacheProvider">
    <providers>
      <add name="MemcachedCacheProvider" type="MemcachedProviders.Cache.MemcachedCacheProvider, MemcachedProviders" keySuffix="_MySuffix_" defaultExpireTime="2000"/>
    </providers>
  </cacheProvider>
  <enyim.com>
    <memcached>
      <servers>
        <!-- 注意这里写你自己的IP地址和数据库的端口号-->
        <add address="127.0.0.1" port="11211"/>
      </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">
      <assemblies>
        <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
      </assemblies>
    </compilation>
    <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>
    <pages>
      <controls>
        <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      </controls>
    </pages>
    <httpHandlers>
      <remove verb="*" path="*.asmx"/>
      <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add verb="GET,HEAD" path="ScriptResource.axd" validate="false" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </httpHandlers>
    <httpModules>
      <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </httpModules>
  </system.web>


  <system.codedom>
      <compilers>
        <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
          <providerOption name="CompilerVersion" value="v3.5"/>
          <providerOption name="WarnAsError" value="false"/>
      </compiler>
    </compilers>
  </system.codedom>
  <runtime>
    <assemblyBinding appliesTo="v2.0.50727" xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

这里说明一下,控制台应用程序应新建的是配置文件,就是app.config文件,而不是xml文件;web程序写在web.config里面就好了。

配置文件写好之后,后面的步骤就会变得相当简单容易了,接下来我贴上我的代码作为示例:


这里面我们使用代码client.Store进行相关的数据操作,您将使用五种基本 memcached 命令执行最简单的操作。这些命令和操作包括:
  set
  add
  replace
  get
  delete
  前三个命令是用于操作存储在 memcached 中的键值对的标准修改命令

set命令是赋值语句,如果存在相应的键的话就去替换,没有的话就会新建。add命令是新增语句,但如果存在了相应的键值对的话,就会报错。replace就是替换和set差不多。get命令是取值命令,根据相应的键去取值,delete是删除命令,但是删除了一个不存在的键的话,会报错。

在上面的代码中我使用到了增值语句,最后我设置了这条数据的缓存时间,就是说超过了这个时间的话,这条数据就会被自动删除掉了。

Memcached不仅能保存简单数据类型的值,还能保存对象类型的值:

<span style="background-color: rgb(255, 255, 255);">public void testMemcachedProviders()          {              string key = "myName";              string value = "Dylan";              bool result =false;              string val=string.Empty;              #region 存/取最简单的数据类型              //如果缓存中没有,就尝试着去存入缓存              if (DistCache.Get(key) == null)              {                  //DistCache.DefaultExpireTime = 1200;//缓存时间                  result = DistCache.Add(key, value);           //存数据                    if (result)                  {                      //如果存入成功,就试着去取                      Thread.Sleep(500);                      string ret = (string)DistCache.Get(key);            //读数据                        //Assert.AreEqual(value, ret);                     //验证                        if (ret != null)                      {                          Response.Write(ret);                          Response.Write("<br/>");                      }                      else                       {                      //取出来的值为null,直接移除该缓存对象                          DistCache.Remove(key);//移除                         // DistCache.RemoveAll();//移除所有                                           }                  }              }              else {                  //缓存中有,直接拿数据                  string ret = (string)DistCache.Get(key);                  if (ret != null)                  {                      Response.Write(ret);                      Response.Write("<br/>");                  }                  else {                      DistCache.Remove(key);                  }              }              #endregion               #region  存/取一个Person对象  0            Person person = new Person() {Id=007,Name="Dylan"};//new 一个Person对象的实例             //如果缓存中没有,则尝试着放入缓存              if (DistCache.Get<Person>("myObj") == null)            {                result = DistCache.Add("myObj", person);                if (result)                {                    Thread.Sleep(500);                     val  = DistCache.Get("myObj").ToString();                    if (val != null) {                        Response.Write(val);                        Response.Write("<br/>");                    }                    else {                        DistCache.Remove("myObj");                    }                                   }            }            else            {                //缓存中已经有该对象,就直接从缓存取                Person p = DistCache.Get<Person>("myObj");                val = person.ToString();                  //也可以直接这样取               // val = DistCache.Get("myObj").ToString();                               if (val != null)                {                    Response.Write(val);                    Response.Write("<br/>");                 }                else                {                    DistCache.Remove("myObj");                }              }              #endregion          }    </span>

上面这段程序就是如何保存对象类型的数据保存在数据库中了。

简单的演示步骤就是这些了,希望能够帮助到大家


0 0
原创粉丝点击