创建控制台应用程序,Program.cs代码如下:
class Program
{
public static void Main(string[] args)
{
//---------------------
// 设置客户端
//---------------------
Console.WriteLine("设置Memcached的客户端");
MemcachedClient.Setup("MyCache", new[] {"localhost"});
//它可以有几个客户不同的配置:
//如果它是不能解析的主机,这个方法会抛出异常。
try
{
MemcachedClient.Setup("MyOtherCache", new[] {"server1.example.com:12345", "server2.example.com:12345"});
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
//获取我们刚建立的实例,所以我们可以使用它。您可以存储此引用,每次你需要它的时候把它拿来,真的没关系
MemcachedClient cache = MemcachedClient.GetInstance("MyCache");
//也可以设置客户标准配置文件。检查这个项目App.config文件“beitmemcached”一节,你会看到一个名为“MyConfigFileCache”客户端的定义
MemcachedClient configFileCache = MemcachedClient.GetInstance("MyConfigFileCache");
//更改客户端设置
cache.SendReceiveTimeout = 5000;
cache.ConnectTimeout = 5000;
cache.MinPoolSize = 1;
cache.MaxPoolSize = 5;
//----------------
// 使用客户端
//----------------
//设置一些项目
Console.WriteLine("存放一些items.");
cache.Set("mystring", "The quick brown fox jumped over the lazy dog.");
cache.Set("myarray", new[] {"这是第一个字符串.", "这是第二个字符串."});
cache.Set("myinteger", 4711);
cache.Set("mydate", new DateTime(2008, 02, 23));
//使用自定义哈希
cache.Set("secondstring", "qqqqqqqqqqqqqqqqqqqqqq", 4711);
//得到一个字符串
var str = cache.Get("mystring") as string;
if (str != null)
{
Console.WriteLine("取数据 根据键: mystring, 值: " + str);
}
//得到一个对象
var array = cache.Get("myarray") as string[];
if (array != null)
{
Console.WriteLine("取数据 根据键: myarray, value 1: " + array[0] + ", value 2: " + array[1]);
}
//一次获取多个值
object[] result = cache.Get(new[] {"myinteger", "mydate"});
if (result[0] != null && result[0] is int)
{
Console.WriteLine("取数据 根据键: myinteger, value: " + (int) result[0]);
}
if (result[1] != null && result[1] is DateTime)
{
Console.WriteLine("取数据 根据键: mydate, value: " + (DateTime) result[1]);
}
str = cache.Get("secondstring", 4711) as string;
if (str != null)
{
Console.WriteLine("取数据 根据键和 custom hash: secondstring, value: " + str);
}
//设置一个计数器
Console.WriteLine("设置一个数据项来递增和递减.");
cache.SetCounter("mycounter", 9000);
ulong? counter = cache.GetCounter("mycounter");
if (counter.HasValue)
{
Console.WriteLine("取得 mycounter, 值为: " + counter.Value);
}
//增加计数器
counter = cache.Increment("mycounter", 1);
if (counter.HasValue)
{
Console.WriteLine("1开始递增计数器, 新值: " + counter.Value);
}
//递减计数器
counter = cache.Decrement("mycounter", 9000);
if (counter.HasValue)
{
Console.WriteLine("9001开始减去9000, 新值: " + counter.Value);
}
//追加和预先准备
Console.WriteLine("追加和预先准备");
cache.Set("foo", "bar");
Console.WriteLine("追加 baz");
cache.Append("foo", " baz");
Console.WriteLine("前面加上 foo");
cache.Prepend("foo", "foo ");
Console.WriteLine("新值: " + cache.Get("foo"));
//CAS(Check and Set)协议,处理同一item被多个线程更改过程的并发问题
cache.Delete("castest");
Console.WriteLine("Trying to CAS不存在的键castest: " + cache.CheckAndSet("castest", "a", 0));
Console.WriteLine("设定键: castest, 值: a");
cache.Set("castest", "a");
Console.WriteLine("Trying to CAS键castest 用错误的唯一标识号: " + cache.CheckAndSet("castest", "a", 0));
ulong unique;
cache.Gets("castest", out unique);
Console.WriteLine("获取castest键的cas唯一标识号为: " + unique);
Console.WriteLine("Trying to CAS 再次用上面的唯一标识号: " + cache.CheckAndSet("castest", "b", unique));
var value = cache.Gets("castest", out unique) as string;
Console.WriteLine("新值: " + value + ", 新的唯一标识号: " + unique);
Console.WriteLine("显示套接字池状态:");
foreach (var host in cache.Status())
{
Console.WriteLine("Host: " + host.Key);
foreach (var item in host.Value)
{
Console.WriteLine("\t" + item.Key + ": " + item.Value);
}
Console.WriteLine();
}
Console.WriteLine();
Console.WriteLine("完成,按Enter键退出.");
Console.ReadLine();
}
}
结果如图: