zoukankan      html  css  js  c++  java
  • 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[] { 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

  • 相关阅读:
    Asp.Net Winform 条形码系列之Code39 Code39 Of .Net BarCode Serial Blog
    .NET 中文星期几的简单实现方式
    C#使用SQLite数据库(asp.net/winform)
    .Net日期时间格式化输出大全 DateTime.ToString(?)
    C#使用HTTP头检测网络资源是否有效
    [转]C#(VB.NET)操作Windows自带的防火墙 之 添加/删除允许通过防火墙的例外程序
    华为C2800进入工程模式
    android webview 加载网页显示对话框
    SVN 与 VS2003
    VisualSVN1.7.7 序列号
  • 原文地址:https://www.cnblogs.com/luyinghuai/p/1278200.html
Copyright © 2011-2022 走看看