標籤:
在上一篇文章,我們講了,為什麼要使用memched做為快取服務器(沒看的同學請點這裡)。下面讓我們以memcached-1.2.1-win32版本的服務元件(安裝後是以一個windows服務做daemon)和C#API(Enyim.Caching)為基礎,做一個"Hello world"級的程式,讓我們真正感受到memcached就在我們身邊。後一的文章,我們還講memcached的核心部分(根據key來hash存取資料,快取資料在server端的記憶體儲存結構)和一些好的案例。
下面的執行個體實現的功能很簡單,根據key來存取一個object對象(要支援Serializable才行哦),因為伺服器端資料都是byte型的資料群組實現存在。
服務的啟動:
1, 將memcached-1.2.1-win32.zip解決到指定的地方,如c:\memcached
2, 命令列輸入 ‘c:\memcached\memcached.exe -d install‘
3, 命令列輸入 ‘c:\memcached\memcached.exe -d start‘ ,該命令啟動 Memcached,預設監聽連接埠為 11211
可以通過 memcached.exe -h 可以查看其協助
第一步:配置config檔案
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="enyim.com">
<section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" />
</sectionGroup>
<section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" />
</configSections>
<enyim.com>
<memcached>
<servers>
<!-- put your own server(s) here-->
<add address="127.0.0.1" port="11211" />
</servers>
<socketPool minPoolSize="10" maxPoolSize="100" connectionTimeout="00:00:10" deadTimeout="00:02:00" />
</memcached>
</enyim.com>
<memcached keyTransformer="Enyim.Caching.TigerHashTransformer, Enyim.Caching">
<servers>
<add address="127.0.0.1" port="11211" />
</servers>
<socketPool minPoolSize="2" maxPoolSize="100" connectionTimeout="00:00:10" deadTimeout="00:02:00" />
</memcached>
</configuration>
這裡的port:11211是, memcached-1.2.1-win32在安裝時預設使用的port.當然你可以用memcached.exe -p 連接埠號碼來自行設定。
第二步, 建立TestMemcachedApp的console project
引用Enyim.Caching.dll或者在solution中加入這個project(可以下載的代碼中找到)。
基礎代碼如下:
//create a instance of MemcachedClient
MemcachedClient mc = new MemcachedClient();
// store a string in the cache
mc.Store(StoreMode.Set, "MyKey", "Hello World");
// retrieve the item from the cache
Console.WriteLine(mc.Get("MyKey"));
完整代碼如下,
using System;
using System.Collections.Generic;
using System.Text;
using Enyim.Caching;
using Enyim.Caching.Memcached;
using System.Net;
using Enyim.Caching.Configuration;
namespace DemoApp
{
class Program
{
static void Main(string[] args)
{
// create a MemcachedClient
// in your application you can cache the client in a static variable or just recreate it every time
MemcachedClient mc = new MemcachedClient();
// store a string in the cache
mc.Store(StoreMode.Set, "MyKey", "Hello World");
// retrieve the item from the cache
Console.WriteLine(mc.Get("MyKey"));
// store some other items
mc.Store(StoreMode.Set, "D1", 1234L);
mc.Store(StoreMode.Set, "D2", DateTime.Now);
mc.Store(StoreMode.Set, "D3", true);
mc.Store(StoreMode.Set, "D4", new Product());
mc.Store(StoreMode.Set, "D5", new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
Console.WriteLine("D1: {0}", mc.Get("D1"));
Console.WriteLine("D2: {0}", mc.Get("D2"));
Console.WriteLine("D3: {0}", mc.Get("D3"));
Console.WriteLine("D4: {0}", mc.Get("D4"));
byte[] tmp = mc.Get<byte[]>("D5");
// delete them from the cache
mc.Remove("D1");
mc.Remove("D2");
mc.Remove("D3");
mc.Remove("D4");
// add an item which is valid for 10 mins
mc.Store(StoreMode.Set, "D4", new Product(), new TimeSpan(0, 10, 0));
Console.ReadLine();
}
// objects must be serializable to be able to store them in the cache
[Serializable]
class Product
{
public double Price = 1.24;
public string Name = "Mineral Water";
public override string ToString()
{
return String.Format("Product {{{0}: {1}}}", this.Name, this.Price);
}
}
}
}
Server和Client API及執行個體代碼下載(在Enyim Memcached 1.2.0.2版本上的修改)
下載memcached服務安裝地址:http://www.danga.com/memcached/
Client API:http://www.danga.com/memcached/apis.bml
enyim.com Memcached Client:memcached執行個體