1.高性能文件缓存key-value存储—Redis
2.ASP.NET HttpRuntime.Cache缓存类使用总结
备注:三篇博文结合阅读,简单理解并且使用,如果想深入学习,请多参考文章中给出的博文地址。
1.前言
a.Memcached是一个高性能的分布式缓存系统,用于Web应用减轻数据库负载,它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高网站的访问速度。
b.Memcached是一个给予存储键/值对的HashMap,底层使用C语言完成,但是客户端可以使用任何语言来编写(Java,.NET,PHP).
c.Memcached中的数据都是存储在memcached内置的内存存储空间中,由于数据仅存在于内存中,因此当某个服务器停止运行或者出现问题之后,所有存放在服务器上的键/值对都会丢失。
d.下面这幅图可以说明Memcached的工作过程,当首次访问系统的时候,系统从数据库中取得数据保存到Memcached中,在第二次访问的时候则直接从Memcached中读取出来需要的值信息。

e.Memcached的特征
Memcached作为高速运行的分布式缓存服务器,具有以下的特点:
e.1:协议简单(客户端通信并不是使用复杂的XML格式,而是使用简单的基于文本行的协议)
e.2:基于libevent的事件处理(libevent是一个程序库,即使服务器的连接数增加,也能发挥o(1)的性能)
e.3:内置内存存储方式(c中已经描述)
e.4:Memcached不互相通信的分布式。
f.推荐阅读,http://kb.cnblogs.com/page/42731/
g.Github下载地址:https://github.com/kencery/Common/blob/master/KenceryCommonMethod/%E7%BC%93%E5%AD%98
2.封装代码调用描述
1 // 源文件头信息:
2 // <copyright file="MemcacheHelper.cs">
3 // Copyright(c)2014-2034 Kencery.All rights reserved.
4 // 个人博客:http://www.cnblogs.com/hanyinglong
5 // 创建人:韩迎龙(kencery)
6 // 创建时间:2015-4-24
7 // </copyright>
8 using System;
9 using System.Configuration;
10 using Memcached.ClientLibrary;
11
12 namespace KenceryCommonMethod
13 {
14 /// <summary>
15 /// 封装使用Memchached信息,读取缓存存放在服务器
16 /// <auther>
17 /// <name>Kencery</name>
18 /// <date>2015-4-24</date>
19 /// </auther>
20 /// </summary>
21 public class MemcacheHelper
22 {
23 /// <summary>
24 /// 字段_instance,存放注册的缓存信息
25 /// </summary>
26 private static MemcacheHelper _instance;
27
28 /// <summary>
29 /// 缓存客户端
30 /// </summary>
31 private readonly MemcachedClient _client;
32
33 /// <summary>
34 /// 受保护类型的缓存对象,初始化一个新的缓存对象
35 /// </summary>
36 protected MemcacheHelper()
37 {
38 //读取app.Config中需要缓存的服务器地址信息,可以传递多个地址,使用","分隔
39 string[] serverList = ConfigurationManager.AppSettings["Memcached.ServerList"].Split(',');
40 try
41 {
42 var sockIoPool = SockIOPool.GetInstance();
43 sockIoPool.SetServers(serverList);
44 sockIoPool.InitConnections = 3;
45 sockIoPool.MinConnections = 3;
46 sockIoPool.MaxConnections = 50;
47 sockIoPool.SocketConnectTimeout = 1000;
48 sockIoPool.SocketTimeout = 3000;
49 sockIoPool.MaintenanceSleep = 30;
50 sockIoPool.Failover = true;
51 sockIoPool.Nagle = false;
52 //实例化缓存对象
53 _client = new MemcachedClient();
54 }
55 catch (Exception ex)
56 {
57 //错误信息写入事务日志
58 throw new Exception(ex.Message);
59 }
60 }
61
62 /// <summary>
63 /// 获取缓存的实例对象,方法调用的时候使用
64 /// </summary>
65 /// <returns></returns>
66 public static MemcacheHelper GetInstance()
67 {
68 return _instance;
69 }
70
71 /// <summary>
72 /// 添加缓存信息(如果存在缓存信息则直接重写设置,否则添加)
73 /// 使用:MemcacheHelper.GetInstance().Add(key,value)
74 /// </summary>
75 /// <param name="key">需要缓存的键</param>
76 /// <param name="value">需要缓存的值</param>
77 public void Add(string key, object value)
78 {
79 if (_client.KeyExists(key))
80 {
81 _client.Set(key, value);
82 }
83 _client.Add(key, value);
84 }
85
86 /// <summary>
87 /// 添加缓存信息
88 /// 使用:MemcacheHelper.GetInstance().Add(key,value,Datetime.Now())
89 /// </summary>
90 /// <param name="key">需要缓存的键</param>
91 /// <param name="value">需要缓存的值</param>
92 /// <param name="expiredDateTime">设置的缓存的过时时间</param>
93 public void Add(string key, object value, DateTime expiredDateTime)
94 {
95 _client.Add(key, value, expiredDateTime);
96 }
97
98 /// <summary>
99 /// 修改缓存的值
100 /// 使用:MemcacheHelper.GetInstance().Update(key,value)
101 /// </summary>
102 /// <param name="key">需要修改的键</param>
103 /// <param name="value">需要修改的值</param>
104 public void Update(string key, object value)
105 {
106 _client.Replace(key, value);
107 }
108
109 /// <summary>
110 /// 修改缓存的值
111 /// 使用:MemcacheHelper.GetInstance().Update(key,value,Datetime.Now())
112 /// </summary>
113 /// <param name="key">需要修改的键</param>
114 /// <param name="value">需要修改的值</param>
115 /// <param name="expiredDateTime">设置的缓存的过时时间</param>
116 public void Update(string key, object value, DateTime expiredDateTime)
117 {
118 _client.Replace(key, value, expiredDateTime);
119 }
120
121 /// <summary>
122 /// 设置缓存
123 /// 使用:MemcacheHelper.GetInstance().Set(key,value)
124 /// </summary>
125 /// <param name="key">设置缓存的键</param>
126 /// <param name="value">设置缓存的值</param>
127 public void Set(string key, object value)
128 {
129 _client.Set(key, value);
130 }
131
132 /// <summary>
133 /// 设置缓存,并修改过期时间
134 /// 使用:MemcacheHelper.GetInstance().Set(key,value,Datetime.Now())
135 /// </summary>
136 /// <param name="key">设置缓存的键</param>
137 /// <param name="value">设置缓存的值</param>
138 /// <param name="expiredTime">设置缓存过期的时间</param>
139 public void Set(string key, object value, DateTime expiredTime)
140 {
141 _client.Set(key, value, expiredTime);
142 }
143
144 /// <summary>
145 /// 删除缓存
146 /// 使用:MemcacheHelper.GetInstance().Delete(key)
147 /// </summary>
148 /// <param name="key">需要删除的缓存的键</param>
149 public void Delete(string key)
150 {
151 _client.Delete(key);
152 }
153
154 /// <summary>
155 /// 获取缓存的值
156 /// 使用:MemcacheHelper.GetInstance().Get(key)
157 /// </summary>
158 /// <param name="key">传递缓存中的键</param>
159 /// <returns>返回缓存在缓存中的信息</returns>
160 public object Get(string key)
161 {
162 return _client.Get(key);
163 }
164
165 /// <summary>
166 /// 缓存是否存在
167 /// 使用:MemcacheHelper.GetInstance().KeyExists(key)
168 /// </summary>
169 /// <param name="key">传递缓存中的键</param>
170 /// <returns>如果为true,则表示存在此缓存,否则比表示不存在</returns>
171 public bool KeyExists(string key)
172 {
173 return _client.KeyExists(key);
174 }
175
176 /// <summary>
177 /// 注册Memcache缓存(在Global.asax的Application_Start方法中注册)
178 /// 使用:MemcacheHelper.RegisterMemcache();
179 /// </summary>
180 public static void RegisterMemcache()
181 {
182 if (_instance == null)
183 {
184 _instance = new MemcacheHelper();
185 }
186 }
187 }
188 }
善用缓存,你的系统访问速度将会有一个很大的访问速度的提升。
来源:https://www.cnblogs.com/hanyinglong/p/Memcached.html