• memcached实例(enyim.com Memcached Client)


     在上一篇文章,我们讲了,为什么要使用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:memcachedmemcached.exe -d install' 
    3, 命令行输入 'c:memcachedmemcached.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

  • 相关阅读:
    Oracle数据导出到MySql
    ORA04031 shared_pool 不能分配足够内存或磁盘碎片
    IDEA那些好用的插件
    MySQL基础篇增删改查
    SpringBoot项目部署在阿里云
    三、Mybatis相应API
    chrome的书签备份
    redis踩坑
    四、Mybatis的Dao层实现
    MySQL基础篇函数
  • 原文地址:https://www.cnblogs.com/Alex80/p/4422338.html
Copyright © 2020-2023  润新知