在本博客中,只是为大家展示一下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>
上面这段程序就是如何保存对象类型的数据保存在数据库中了。
简单的演示步骤就是这些了,希望能够帮助到大家