标签:控制台应用程序 封装 程序 一个 实例 order 算法 com one
高并发访问数据库的痛点:死锁
磁盘IO之痛
多客户端共享缓存
Net+Memory>>IO
读写性能完美 1s:读取可以1w次
简单集群搭建Cluster
开源
没有提供主从赋值功能,也没有提供容灾等功能,所以所有的代码都只是考虑性能最佳(Redis)
学习成本非常低,入门非常容易
丰富的成功案例
Socket 服务器端
数据:键值对存储
内存处理的算法
集群搭建原理
客户端实现集群的原理
1、下载安装Memcached服务端
下载完成后解压到桌面,如下截图
两种安装方式,a:双击memcached.exe安装。b:安装到Windows服务中。这里,我们推荐使用第二种安装方式。
确认下服务是否安装并启动
telnet链接到Memcached服务,并查看其stats统计项
2、测试Mamcached的读写操作(set和get方法)
创建一个控制台应用程序,添加应用,并编写如下代码
1 /// <summary> 2 /// 测试MemCahed 3 /// </summary> 4 /// <param name="args"></param> 5 static void Main(string[] args) 6 { 7 string[] serverlist = { "127.0.0.1:11211", "10.0.0.132:11211" }; 8 9 //初始化池 10 SockIOPool pool = SockIOPool.GetInstance(); 11 pool.SetServers(serverlist); 12 13 pool.InitConnections = 3; 14 pool.MinConnections = 3; 15 pool.MaxConnections = 5; 16 17 pool.SocketConnectTimeout = 1000; 18 pool.SocketTimeout = 3000; 19 20 pool.MaintenanceSleep = 30; 21 pool.Failover = true; 22 23 pool.Nagle = false; 24 pool.Initialize(); 25 26 // 获得客户端实例 27 MemcachedClient mc = new MemcachedClient(); 28 mc.EnableCompression = false; 29 30 Console.WriteLine("------------测 试-----------"); 31 mc.Set("test", "my value"); //存储数据到缓存服务器,这里将字符串"my value"缓存,key 是"test" 32 33 if (mc.KeyExists("test")) //测试缓存存在key为test的项目 34 { 35 Console.WriteLine("test is Exists"); 36 Console.WriteLine(mc.Get("test").ToString()); //在缓存中获取key为test的项目 37 } 38 else 39 { 40 Console.WriteLine("test not Exists"); 41 } 42 43 Console.ReadLine(); 44 45 mc.Delete("test"); //移除缓存中key为test的项目 46 47 if (mc.KeyExists("test")) 48 { 49 Console.WriteLine("test is Exists"); 50 Console.WriteLine(mc.Get("test").ToString()); 51 } 52 else 53 { 54 Console.WriteLine("test not Exists"); 55 } 56 Console.ReadLine(); 57 58 SockIOPool.GetInstance().Shutdown(); //关闭池, 关闭sockets 59 60 } 61
启动调试,显示结果如下。
3、封装MemcachedHelper类
1 public class MemcachedHelper 2 { 3 private static readonly MemcachedClient mc = null; 4 5 /// <summary> 6 /// 构造函数,默认连接127.0.0.1:11211 7 /// </summary> 8 static MemcacheHelper() 9 { 10 //最好放在配置文件中 11 string[] serverlist = { "127.0.0.1:11211", "10.0.0.132:11211" }; 12 13 //初始化池 14 SockIOPool pool = SockIOPool.GetInstance(); 15 pool.SetServers(serverlist); 16 17 pool.InitConnections = 3; 18 pool.MinConnections = 3; 19 pool.MaxConnections = 5; 20 21 pool.SocketConnectTimeout = 1000; 22 pool.SocketTimeout = 3000; 23 24 pool.MaintenanceSleep = 30; 25 pool.Failover = true; 26 27 pool.Nagle = false; 28 pool.Initialize(); 29 30 // 获得客户端实例 31 mc = new MemcachedClient(); 32 mc.EnableCompression = false; 33 } 34 35 /// <summary> 36 /// 存储数据 37 /// </summary> 38 /// <param name="key">键</param> 39 /// <param name="value">值</param> 40 /// <returns></returns> 41 public static bool Set(string key, object value) 42 { 43 return mc.Set(key, value); 44 } 45 46 /// <summary> 47 /// 存储数据并指定过期时间 48 /// </summary> 49 /// <param name="key">键</param> 50 /// <param name="value">值</param> 51 /// <param name="time">过期时间,注意默认最大30天</param> 52 /// <returns></returns> 53 public static bool Set(string key, object value, DateTime time) 54 { 55 return mc.Set(key, value, time); 56 } 57 58 /// <summary> 59 /// 根据键获取数据 60 /// </summary> 61 /// <param name="key">键</param> 62 /// <returns></returns> 63 public static object Get(string key) 64 { 65 return mc.Get(key); 66 } 67 68 /// <summary> 69 /// 根据键删除数据 70 /// </summary> 71 /// <param name="key">键</param> 72 /// <returns></returns> 73 public static bool Delete(string key) 74 { 75 if (mc.KeyExists(key)) 76 { 77 return mc.Delete(key); 78 79 } 80 return false; 81 } 82 83 }
至此已全部完成。
作者:Jeremy.Wu
出处:https://www.cnblogs.com/jeremywucnblog/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
标签:控制台应用程序 封装 程序 一个 实例 order 算法 com one
原文地址:https://www.cnblogs.com/jeremywucnblog/p/12817253.html