WHAT
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。(摘自百度百科)
WHY
Memcached的出现是解决服务器集群多台机器共享信息的问题。
例如:现在有三台机器组成了一个Web的应用集群,其中一台机器用户登录,然后其他另外两台机器如何共享登录状态?
传统的解决方法:1:进程外的Session;2:用数据库存储当前登录状态。速度慢,加大数据库的压力。
Memcached的优势:
读写性能完美 1s:读取可以1w次。 写:10w
开源 Open Source
学习成本非常低,入门非常容易
丰富的成功的案例
缺点:
没有提供主从赋值功能,也没提供容灾等功能,所以所有的代码基本都只是考虑性能最佳。(Redis)
HOW
服务器端
32位:http://code.jellycan.com/files/memcached-1.2.6-win32-bin.zip
64位:http://www.urielkatz.com/projects/memcached-win64/memcached-win64.zip
1. 解压缩文件到c:\memcached
2.以管理员身份运行命令行窗口(cmd.exe)
3. 进入文件所在目录,命令行输入 'memcached.exe -d install'
右键我的电脑->管理->服务 出项以下选项说明安装成功
4. 命令行输入 'memcached.exe -d start' ,该命令启动 Memcached ,默认监听端口为 11211(详细的设置请查阅相关资料)
客户端
代码:
//服务器端列表
string[] serverlist = { "127.0.0.1:11211" };
//初始化池
SockIOPool sock = SockIOPool.GetInstance();
sock.SetServers(serverlist);//添加服务器列表
sock.InitConnections = 3;//设置连接池初始数目
sock.MinConnections = 3;//设置最小连接数目
sock.MaxConnections = 5;//设置最大连接数目
sock.SocketConnectTimeout = 1000;//设置连接的套接字超时。
sock.SocketTimeout = 3000;//设置套接字超时读取
sock.MaintenanceSleep = 30;//设置维护线程运行的睡眠时间。如果设置为0,那么维护线程将不会启动;
//获取或设置池的故障标志。
//如果这个标志被设置为true则socket连接失败,
//将试图从另一台服务器返回一个套接字如果存在的话。
//如果设置为false,则得到一个套接字如果存在的话。否则返回NULL,如果它无法连接到请求的服务器。
sock.Failover = true; //如果为false,对所有创建的套接字关闭Nagle的算法。
sock.Nagle = false;
sock.Initialize();
var mc = new MemcachedClient();
mc.EnableCompression = true; //是否启用压缩数据
mc.Set("hello", "pt girl");//设置 键值
mc.KeyExists("hello");//键 是否存
var msg = mc.Get("hello"); //获取 一个键值
Console.WriteLine(msg);
Console.ReadKey();
mc.Delete("hello");// 删除 键值
msg = mc.Get("hello");
Console.WriteLine(msg);
Console.ReadKey();