不积跬步,无以至千里;不积小流,无以成江海

Our practice

不积跬步,无以至千里;不积小流,无以成江海

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  102 随笔 :: 46 文章 :: 24 评论 :: 1 引用

    在上一篇文章,我们讲了,为什么要使用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[] { 12345678910 });            
            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(0100));

            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

posted on 2008-08-28 01:16  英怀  阅读(9113)  评论(7编辑  收藏