memcached系列1:memcached实例
转载之 http://www.cnblogs.com/luyinghuai/archive/2008/08/28/1278200.html
在上一篇文章,我们讲了,为什么要使用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
                    
                
                
            
        
浙公网安备 33010602011771号