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&quot;.log&quot;"/>
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     }
MemcachedHelper

第四步:测试:

 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 }
测试

 

posted on 2018-10-23 16:29  高达  阅读(705)  评论(0)    收藏  举报

导航