vincen 发表于 2015-9-1 11:58:17

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=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?>   
<configuration>   
<configSections>   
<sectionGroup name=&quot;enyim.com&quot;>   
<section name=&quot;memcached&quot; type=&quot;Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching&quot; />   
</sectionGroup>   
<section name=&quot;memcached&quot; type=&quot;Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching&quot; />   
</configSections>   
<enyim.com>   
<memcached>   
<servers>   
<!-- put your own server(s) here-->   
<add address=&quot;127.0.0.1&quot; port=&quot;11211&quot; />   
</servers>   
<socketPool minPoolSize=&quot;10&quot; maxPoolSize=&quot;100&quot; connectionTimeout=&quot;00:00:10&quot; deadTimeout=&quot;00:02:00&quot; />   
</memcached>   
</enyim.com>   
<memcached keyTransformer=&quot;Enyim.Caching.TigerHashTransformer, Enyim.Caching&quot;>   
<servers>   
<add address=&quot;127.0.0.1&quot; port=&quot;11211&quot; />   
</servers>   
<socketPool minPoolSize=&quot;2&quot; maxPoolSize=&quot;100&quot; connectionTimeout=&quot;00:00:10&quot; deadTimeout=&quot;00:02:00&quot; />   
</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, &quot;MyKey&quot;, &quot;Hello World&quot;);   
// retrieve the item from the cache   
Console.WriteLine(mc.Get(&quot;MyKey&quot;));
  完整代码如下,
  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, &quot;MyKey&quot;, &quot;Hello World&quot;);   
// retrieve the item from the cache   
            Console.WriteLine(mc.Get(&quot;MyKey&quot;));   
// store some other items   
            mc.Store(StoreMode.Set, &quot;D1&quot;, 1234L);   
            mc.Store(StoreMode.Set, &quot;D2&quot;, DateTime.Now);   
            mc.Store(StoreMode.Set, &quot;D3&quot;, true);   
            mc.Store(StoreMode.Set, &quot;D4&quot;, new Product());   
            mc.Store(StoreMode.Set, &quot;D5&quot;, new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });            
            Console.WriteLine(&quot;D1: {0}&quot;, mc.Get(&quot;D1&quot;));   
            Console.WriteLine(&quot;D2: {0}&quot;, mc.Get(&quot;D2&quot;));   
            Console.WriteLine(&quot;D3: {0}&quot;, mc.Get(&quot;D3&quot;));   
            Console.WriteLine(&quot;D4: {0}&quot;, mc.Get(&quot;D4&quot;));   
byte[] tmp = mc.Get<byte[]>(&quot;D5&quot;);   
// delete them from the cache   
            mc.Remove(&quot;D1&quot;);   
            mc.Remove(&quot;D2&quot;);   
            mc.Remove(&quot;D3&quot;);   
            mc.Remove(&quot;D4&quot;);   
// add an item which is valid for 10 mins   
            mc.Store(StoreMode.Set, &quot;D4&quot;, new Product(), new TimeSpan(0, 10, 0));   
            Console.ReadLine();   
      }   
// objects must be serializable to be able to store them in the cache   
         
class Product   
      {   
public double Price = 1.24;   
public string Name = &quot;Mineral Water&quot;;   
public override string ToString()   
            {   
return String.Format(&quot;Product {{{0}: {1}}}&quot;, 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
  
页: [1]
查看完整版本: memcached系列1:memcached实例