在实际项目中,我们有些相同的数据是经常要从数据库中读取访问的,这种重复极大的增加了数据库负载。缓存是解决这个问题的好办法。但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵活。此时Memcached可以帮助我们进行数据的缓存。
参考自:https://www.cnblogs.com/hyruur/archive/2011/03/31/2000942.html
Memcached是什么?
高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。
Memcached能缓存什么?
通过在内存里维护一个统一的巨大的hash表,Memcached能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
Memcached的特点
Memcached的缓存是一种分布式的,可以让不同主机上的多个用户同时访问, 因此解决了共享内存只能单机应用的局限,更不会出现使用数据库做类似事情的时候,磁盘开销和阻塞的发生。
Memcached的使用
一 Memcached服务器端的安装 (此处将其作为系统服务安装)
下载文件:memcached 1.2.1 for Win32 binaries (Dec 23, 2006)
1、 解压缩文件到c:\memcached
2、 命令行输入 'c:\memcached\memcached.exe -d install'
3、 命令行输入 'c:\memcached\memcached.exe -d start' ,该命令启动 Memcached ,默认监听端口为 11211
4、 通过telnet客户端测试连接memcached服务端的连接
5、输入指令Stauts查看连接状态
二 .Net项目中使用Memecached
1、 .NET memcached client library
下载文件:https://sourceforge.net/projects/memcacheddotnet/
2、在项目中引用dll文件
3、代码实现方法
1 namespace Memcached.MemcachedBench 2 { 3 using System; 4 using System.Collections; 5 6 using Memcached.ClientLibrary; 7 8 public class MemcachedBench 9 { 10 [STAThread] 11 public static void Main(String[] args) 12 { 13 string[] serverlist = { "10.0.0.131:11211", "10.0.0.132:11211" }; 14 15 //初始化池 16 SockIOPool pool = SockIOPool.GetInstance(); 17 pool.SetServers(serverlist); 18 19 pool.InitConnections = 3; 20 pool.MinConnections = 3; 21 pool.MaxConnections = 5; 22 23 pool.SocketConnectTimeout = 1000; 24 pool.SocketTimeout = 3000; 25 26 pool.MaintenanceSleep = 30; 27 pool.Failover = true; 28 29 pool.Nagle = false; 30 pool.Initialize(); 31 32 // 获得客户端实例 33 MemcachedClient mc = new MemcachedClient(); 34 mc.EnableCompression = false; 35 36 Console.WriteLine("------------测 试-----------"); 37 mc.Set("test", "my value"); //存储数据到缓存服务器,这里将字符串"my value"缓存,key 是"test" 38 39 if (mc.KeyExists("test")) //测试缓存存在key为test的项目 40 { 41 Console.WriteLine("test is Exists"); 42 Console.WriteLine(mc.Get("test").ToString()); //在缓存中获取key为test的项目 43 } 44 else 45 { 46 Console.WriteLine("test not Exists"); 47 } 48 49 Console.ReadLine(); 50 51 mc.Delete("test"); //移除缓存中key为test的项目 52 53 if (mc.KeyExists("test")) 54 { 55 Console.WriteLine("test is Exists"); 56 Console.WriteLine(mc.Get("test").ToString()); 57 } 58 else 59 { 60 Console.WriteLine("test not Exists"); 61 } 62 Console.ReadLine(); 63 64 SockIOPool.GetInstance().Shutdown(); //关闭池, 关闭sockets 65 } 66 } 67 }
4、结果展示