[memcached] 1. 基本操作

有关 memcached 的说明和介绍网上已经有很多了,比如《Memcached深度分析》这篇文章就很详细。本文的目的仅仅是研究在 .NET 下的一些使用方法。

1. 安装

将 memcached for Windows 压缩包解压后,执行下面的命令安装服务:

c:\memcached> memcached -d install


服务名称是 "memcached Server",我们可以使用 "memcached -d uninstall" 删除服务。

CMD命令行操作:

memcached -d start # 启动服务
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 下载客户端类库。

我们首先要做的是初始化网络连接参数。

var pool = SockIOPool.GetInstance();
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) 初始化多个环境,以提供不同的服务器组或者连接参数。

var pool = SockIOPool.GetInstance("cache2");
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 进行相关操作,以下是代码演示。

var client = new MemcachedClient();

// 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的使用和协议分析详解

posted on 2009-10-22 17:32  delphi2007  阅读(303)  评论(0编辑  收藏  举报