memcached系列2:memcached实例

在上一篇文章,我们讲了,为什么要使用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

你可能感兴趣的:(memcached)