在上一篇文章,我們講了,為什么要使用memched做為緩存服務(wù)器(沒看的同學(xué)請點(diǎn)這里)。下面讓我們以memcached-1.2.1-win32版本的服務(wù)組件(安裝后是以一個windows服務(wù)做daemon)和C#API(Enyim.Caching)為基礎(chǔ),做一個"Hello world"級的程序,讓我們真正感受到memcached就在我們身邊。后一的文章,我們還講memcached的核心部分(根據(jù)key來hash存取數(shù)據(jù),緩存數(shù)據(jù)在server端的內(nèi)存存儲結(jié)構(gòu))和一些好的案例。
下面的實(shí)例實(shí)現(xiàn)的功能很簡單,根據(jù)key來存取一個object對象(要支持Serializable才行哦),因?yàn)榉?wù)器端數(shù)據(jù)都是byte型的數(shù)據(jù)組實(shí)現(xiàn)存在。
服務(wù)的啟動:
1, 將memcached-1.2.1-win32.zip解決到指定的地方,如c:\memcached
2, 命令行輸入 'c:\memcached\memcached.exe -d install'
3, 命令行輸入 'c:\memcached\memcached.exe -d start' ,該命令啟動 Memcached,默認(rèn)監(jiān)聽端口為 11211
可以通過 memcached.exe -h 可以查看其幫助
第一步:配置config文件
<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在安裝時默認(rèn)使用的port.當(dāng)然你可以用memcached.exe -p 端口號來自行設(shè)置。
第二步, 新建TestMemcachedApp的console project
引用Enyim.Caching.dll或者在solution中加入這個project(可以下載的代碼中找到)。
基礎(chǔ)代碼如下:
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.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及實(shí)例代碼下載(在Enyim Memcached 1.2.0.2版本上的修改)
下載memcached服務(wù)安裝地址:http://www.danga.com/memcached/
Client API下載地址:http://www.danga.com/memcached/apis.bml

浙公網(wǎng)安備 33010602011771號