02 memcache 使用NET操作 https://pan.baidu.com/s/1AX1JJhl84opLemRzp69rpA
第一步:新建一个一般处理程序并引用下面三个DLL
Memcached.ClientLibrary.dll (作用:操作Memcached与服务端的通迅)
ICSharpCode.SharpZipLib.dll (作用:记录Memcached存储数据时压缩处理)
log4net.dll (作用:记录Memcached日志)


第二步:配置log4net.dll 日志文件
1 <?xml version="1.0" encoding="utf-8"?> 2 <!-- 3 有关如何配置 ASP.NET 应用程序的详细信息,请访问 4 http://go.microsoft.com/fwlink/?LinkId=169433 5 --> 6 7 <configuration> 8 9 <!--配置日志S --> 10 <configSections> 11 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 12 </configSections> 13 14 <log4net> 15 <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 16 <param name="File" value="LogFiles/"/> 17 <param name="AppendToFile" value="true"/> 18 <param name="MaxSizeRollBackups" value="10"/> 19 <param name="StaticLogFileName" value="false"/> 20 <param name="DatePattern" value="yyyy-MM-dd-HH".log""/> 21 <param name="RollingStyle" value="Date"/> 22 <layout type="log4net.Layout.PatternLayout"> 23 <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger %ndc - %message%newline"/> 24 </layout> 25 </appender> 26 <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 27 <layout type="log4net.Layout.PatternLayout"> 28 <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger %ndc - %message%newline" /> 29 </layout> 30 </appender> 31 <root> 32 <level value="ALL" /> 33 <appender-ref ref="RollingLogFileAppender" /> 34 <appender-ref ref="ConsoleAppender" /> 35 </root> 36 <logger name="Memcached.ClientLibrary"> 37 <level value="WARN" /> 38 </logger> 39 </log4net> 40 <!--配置日志E--> 41 42 43 <appSettings> 44 <add key="webpages:Version" value="2.0.0.0" /> 45 <add key="webpages:Enabled" value="false" /> 46 <add key="PreserveLoginUrl" value="true" /> 47 <add key="ClientValidationEnabled" value="true" /> 48 <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 49 </appSettings> 50 51 <system.web> 52 53 <httpRuntime targetFramework="4.5" /> 54 55 <compilation debug="true" targetFramework="4.5" /> 56 57 <pages> 58 <namespaces> 59 <add namespace="System.Web.Helpers" /> 60 <add namespace="System.Web.Mvc" /> 61 <add namespace="System.Web.Mvc.Ajax" /> 62 <add namespace="System.Web.Mvc.Html" /> 63 <add namespace="System.Web.Routing" /> 64 <add namespace="System.Web.WebPages" /> 65 </namespaces> 66 </pages> 67 </system.web> 68 69 <system.webServer> 70 <validation validateIntegratedModeConfiguration="false" /> 71 72 <handlers> 73 <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> 74 <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 75 <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 76 <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> 77 <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> 78 <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 79 </handlers></system.webServer> 80 </configuration>

第三步:封装类
1 public class MemcachedHelper 2 { 3 public MemcachedClient _mClient; 4 /// <summary> 5 /// 初始化。 6 /// </summary> 7 /// <param name="connStr">链接字符串例:127.0.0.1:11211</param> 8 /// <param name="poolName">别名</param> 9 public MemcachedHelper(string[] servers, string poolName) 10 { 11 _mClient = new MemcachedClient(); 12 _mClient.PoolName = poolName; 13 _mClient.EnableCompression = false; 14 //初始化 15 SockIOPool pool = SockIOPool.GetInstance(_mClient.PoolName); 16 //设置服务器列表 17 pool.SetServers(servers); 18 //各服务器之间负载均衡的设置比例 19 pool.SetWeights(new int[] { 1 }); 20 //初始化时创建连接数 21 pool.InitConnections = 3; 22 //最小连接数 23 pool.MinConnections = 3; 24 //最大连接数 25 pool.MaxConnections = 5; 26 //连接的最大空闲时间,下面设置为6个小时(单位ms),超过这个设置时间,连接会被释放掉 27 pool.MaxIdle = 1000 * 60 * 60 * 6; 28 //socket连接的超时时间,下面设置表示不超时(单位ms),即一直保持链接状态 29 pool.SocketConnectTimeout = 0; 30 //通讯的超市时间,下面设置为3秒(单位ms),.Net版本没有实现 31 pool.SocketTimeout = 1000 * 3; 32 //维护线程的间隔激活时间,下面设置为30秒(单位s),设置为0时表示不启用维护线程 33 pool.MaintenanceSleep = 30; 34 //设置SocktIO池的故障标志 35 pool.Failover = true; 36 //是否对TCP/IP通讯使用nalgle算法,.net版本没有实现 37 pool.Nagle = false; 38 //socket单次任务的最大时间(单位ms),超过这个时间socket会被强行中端掉,当前任务失败。 39 pool.MaxBusy = 1000 * 10; 40 //初始化池 41 pool.Initialize(); 42 43 } 44 45 public bool Set<T>(string key, T obj) 46 { 47 return _mClient.Set(key, obj); 48 } 49 50 public bool Set<T>(string key, T obj, DateTime expireTime) 51 { 52 return _mClient.Set(key, obj, expireTime); 53 } 54 55 public bool Add<T>(string key, T obj) 56 { 57 return _mClient.Add(key, obj); 58 } 59 60 public bool Add<T>(string key, T obj, DateTime expireTime) 61 { 62 return _mClient.Add(key, obj, expireTime); 63 } 64 65 public bool Update<T>(string key, T obj) 66 { 67 return _mClient.Replace(key, obj); 68 } 69 70 public bool Update<T>(string key, T obj, DateTime expireTime) 71 { 72 return _mClient.Replace(key, obj, expireTime); 73 } 74 75 public bool Delete(string key) 76 { 77 return _mClient.Delete(key); 78 } 79 80 public T Get<T>(string key) 81 { 82 return (T)_mClient.Get(key); 83 } 84 85 public List<T> GetList<T>(string[] keys) 86 { 87 return _mClient.GetMultipleArray(keys).Select(p => (T)p).ToList(); 88 } 89 }
第四步:测试:
1 using Memcached.Models; 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Web; 6 using System.Web.Mvc; 7 8 9 namespace Memcached.Controllers 10 { 11 public class HomeController : Controller 12 { 13 // 14 // GET: /Home/ 15 16 public ActionResult Index() 17 { 18 string[] servers = { "127.0.0.1:11211" }; 19 MemcachedHelper MemcachedHelper = new MemcachedHelper(servers, "aaa"); 20 21 Add(MemcachedHelper); 22 Set(MemcachedHelper); 23 Replace(MemcachedHelper); 24 return View(); 25 } 26 27 //memcache 中 add 、 set 、replace 的区别 28 //memcache 中 add 、 set 、replace 的区别 29 //用过memcache的人都有一个疑惑,那就是memcache中为什么会有一个add方法、一个set方法、一个replace呢,这几个方法又有着什么样的区别呢,下边我们来分析下这几个方法的不同之处: 30 //memcache::add 方法:add方法用于向memcache服务器添加一个要缓存的数据。 31 //memcache::set 方法:set方法用于设置一个指定key的缓存内容,set方法是add方法和replace方法的集合体 32 //mmecache::replace方法: replace方法用于替换一个指定key的缓存内容,如果key不存在则返回false 33 public void Add(MemcachedHelper MemcachedHelper) 34 { 35 36 bool ok = false; 37 People p = new People(); 38 p.Name = "001"; 39 ok = MemcachedHelper.Add<People>("Add", p); 40 var end = MemcachedHelper.Get<People>("p");// 得到001 41 p.Name = "002"; 42 ok = MemcachedHelper.Add<People>("Add", p); 43 end = MemcachedHelper.Get<People>("p");// 得到001 44 } 45 public void Set(MemcachedHelper MemcachedHelper) 46 { 47 bool ok = false; 48 People p = new People(); 49 p.Name = "001"; 50 ok = MemcachedHelper.Set<People>("Set", p); 51 var end = MemcachedHelper.Get<People>("Set");// 得到001 52 p.Name = "002"; 53 ok = MemcachedHelper.Set<People>("Set", p); 54 end = MemcachedHelper.Get<People>("Set");// 得到002 55 } 56 public void Replace(MemcachedHelper MemcachedHelper) 57 { 58 bool ok = false; 59 People p = new People(); 60 p.Name = "001"; 61 ok = MemcachedHelper.Set<People>("Replace", p); 62 ok = MemcachedHelper.Update<People>("Replace", p); 63 var end = MemcachedHelper.Get<People>("Replace");// 得到001 64 p.Name = "002"; 65 ok = MemcachedHelper.Update<People>("Replace", p); 66 end = MemcachedHelper.Get<People>("Replace");// 得到002 67 } 68 69 70 71 } 72 }
浙公网安备 33010602011771号