C#操作Memcache

来源:互联网 发布:ios优酷网络连接失败 编辑:程序博客网 时间:2024/05/16 19:35

软件从单机到分布式

走向分布式就要解决:多台机器共享登录信息的问题。

解决1:AspNet 进程外的Session。
解决2:用数据库存储当前登录状态。
解决3:Memcache 【性能最好,类似的:Redis,NoSql】

memcache 是一个分布式的缓存系统,但是本身没有提供集群功能,数据也是键值对存储Memcache服务器端并没有提供集群功能,但是通过客户端的驱动程序实现了集群配置

why memcache ?

1,高并发访问数据库的痛楚:死锁!

2磁盘IO之痛:

3多客户端共享缓存
4Net + Memory  >> IO    
5读写性能完美  1s:读取可以1w次。 写:10w
6超简单集群搭建
7开源 Open Source
8没有提供主从赋值功能,也没提供容灾等功能,所以所有的代码基本都只是考虑性能最佳。(Redis)
9学习成本非常低,入门非常容易

memcache搭建小例子

下载Memcache

安装服务:cmd→Memcached.exe -d install 

启动服务:cmd→Memcached.exe -d start

检查服务是否启动:连接到Memcache控制台:telnet ServerIP 11211  输入命令:stats检查当前服务状态。

C#操作Memcache代码

1.添加程序集引用
http://sourceforge.net/projects/memcacheddotnet/

将Commons.dll,ICSharpCode.SharpZipLib.dll,log4net.dll,Memcached.ClientLibrary.dll 等放到bin目录
2. 引用Memcached.ClientLibrary.dll

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" };//ip地址
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("------------测 试Memcache----------");
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();  //关闭池
65         }
66     }
67 }


0 0
原创粉丝点击