[memcached] 1. 基本操作
有关 memcached 的说明和介绍网上已经有很多了,比如《Memcached深度分析》这篇文章就很详细。本文的目的仅仅是研究在 .NET 下的一些使用方法。
1. 安装
将 memcached for Windows 压缩包解压后,执行下面的命令安装服务:
服务名称是 "memcached Server",我们可以使用 "memcached -d uninstall" 删除服务。
CMD命令行操作:
memcached -d stop # 停止服务
memcached -d restart # 这个命令好像有问题。~~~
memcached -h # 显示帮助信息
有些命令需要通过服务参数来执行,我们可以用下面方法修改这些服务参数。修改前先停止 memcached 服务。
(1) 打开注册表,找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server。
(2) 修改 ImagePath 项,比如 ""C:\memcached\memcached.exe" -d runservice -m 100 -p 1234",这样服务启动后监听端口就成了 1234,最大缓存内存就是 100 MB。
2. 客户端编程
首先到 .NET memcached client library 下载客户端类库。
我们首先要做的是初始化网络连接参数。
pool.SetServers(new[] { "192.168.1.101:1234", "192.168.1.102:1234" });
pool.InitConnections = 3;
pool.MinConnections = 3;
pool.MaxConnections = 5;
pool.SocketConnectTimeout = 1000;
pool.SocketTimeout = 3000;
pool.MaintenanceSleep = 30;
pool.Failover = true;
pool.Nagle = false;
pool.Initialize();
通常情况下,我们只需使用默认的 SockIOPool,当然也可以用 SockIOPool.GetInstance(string poolName) 初始化多个环境,以提供不同的服务器组或者连接参数。
pool.SetServers(new[] { "192.168.1.101:1235" });
pool.InitConnections = 3;
pool.MinConnections = 3;
pool.MaxConnections = 5;
pool.SocketConnectTimeout = 1000;
pool.SocketTimeout = 3000;
pool.MaintenanceSleep = 30;
pool.Failover = true;
pool.Nagle = false;
pool.Initialize();
// ------------------
var client = new MemcachedClient { EnableCompression = true };
client.PoolName = "cache2";
client.Set("a", 100);
初始化只需在第一次缓存操作之前调用即可。接下来,我们可以创建 MemcachedClient 对象连接 memcached Server 进行相关操作,以下是代码演示。
// a. 设置
client.Set("a", 100);
// b. 获取
client.Get("a");
// c. 判断
var b = client.KeyExists("a");
// d. 删除
client.Delete("a");
// e. 添加 (服务器上必须没有相同的 Key 存在)
if (client.KeyExists("a")) client.Delete("a");
client.Add("a", 123);
// f. 替换 (服务器上必须有相同的 Key 存在)
if (!client.KeyExists("a")) client.Set("a", 1);
client.Replace("a", 4567);
// g. 计数器
client.StoreCounter("i", 100);
for (int i = 0; i < 3; i++)
{
client.Increment("i", 1); // 递增
var count = client.GetCounter("i");
Console.WriteLine(count);
}
for (int i = 0; i < 5; i++)
{
client.Decrement("i", 1); // 递减
var count = client.GetCounter("i");
Console.WriteLine(count);
}
// h. 清除服务器上所有数据
client.FlushAll();
// i. 一次获取多个数据,减少网络传输时间。
client.Set("a", 1);
client.Set("b", 2);
client.Set("c", 3);
var vs = client.GetMultiple(new[] { "a", "b", "c" });
foreach (var item in vs.Keys)
{
Console.WriteLine("{0}={1}", item, vs[item]);
}
var ar = client.GetMultipleArray(new[] { "a", "b", "c" }); // 仅返回 value 数组
foreach (var item in ar)
{
Console.WriteLine(item);
}
// j. 获取服务器信息
var stats = client.Stats();
foreach (var server in stats.Keys)
{
Console.WriteLine(server);
Console.WriteLine("-------------");
var infos = stats[server] as Hashtable;
foreach (var item in infos.Keys)
{
Console.WriteLine("{0}={1}", item, infos[item]);
}
}
---------------------
资源:
memcached
memcached for windows
.NET memcached client library
enyim.com Memcached Client
Memcached深度分析
Memcache的使用和协议分析详解