Andy  
一个快乐的码农,专注于NET平台技术(WPF/WCF/EF....)

memcached 是个免费开源,高效,快速的分布式内存对象缓存系统

目前最新的memcached是1.4.15版,下载地址 (源码)

window下安装版 http://code.jellycan.com/memcached/

测试版本: memcached1.4

1.memcache安装/启动

   直接解压,然后打开cmd转到,撞到memcached所在的目录,输入

   安装命令 : memcached.exe -d install

   启动服务: memcached.exe -d start

   设置端口可以使用 -p port_number(默认是11211), 设置最大使用内存 : -m <num> (默认是64MB) 

   memcached 其他命令:

   -d restart 重启, -d uninstall 卸载 , -l ipaddress 设置连接的主机地址( 默认本机)

  -d stop|shutdown 关闭正在运行的memcached服务

 

2. memcached使用

  这里客户端类库使用 Enyim.Caching,当前版本是2.12 , Enyim.Caching除了支持memcached外还支持membase的访问,membase默认的net客户端也是使用Enyim.Caching库

  a.新建一个NET 控制端工程

  b.定义一个实体类 User

  c.定义一个MemcacheClient辅助类,对memcached操作简单封装

 代码:

   User实体类

    [Serializable]
    public class User {
        public string ID { get; set; }
        public string UserName { get; set; }
        public string Address { get; set; }
    }

 Memcached辅助类

 

    public class MemcachedClient<TObject> {
        private MemcachedClient(){ 
            this.init_memcached_client();
        }

        private static MemcachedClient<TObject> _instance = null;
        public static MemcachedClient<TObject> Instance {
            get {
                if (null == _instance) {
                    _instance = new MemcachedClient<TObject>();
                }

                return _instance;
            }
        }

        private Enyim.Caching.MemcachedClient _client = null;
        private void init_memcached_client() {
            //通过编码配置memcached客户端
            var config = new MemcachedClientConfiguration();
            config.AddServer("127.0.0.1", 11211);

            _client = new Enyim.Caching.MemcachedClient(config);
        }

        //缓存数据
        //key 键值,用于获取指定的对象
        //obj 存储的数据
        public bool Store(TObject obj, string key) {
            bool result = _client.Store(StoreMode.Add, key, obj);
            return result;
        }

        //从缓存中移除指定key的数据
        public bool Remove(string key) {
            bool result = _client.Remove(key);
            return result;
        }

        //指定key获取关联数据
        public TObject Query(string key) {
            object tempObj = null;
            if (_client.TryGet(key, out tempObj)) {
                return (TObject)tempObj;
            }
            else {
                return default( TObject );
            }
        }
    }

  测试

 

    class Program {
        static void Main(string[] args) {
            create_and_set_user();

            //get data
            User temp = MemcachedClient<User>.Instance.Query("0006");
            string string_message = "ID:" + temp.ID +
                " - Name:" + temp.UserName +
                " - Address:" + temp.Address;
            Console.WriteLine(string_message);

            Console.ReadKey(true);
        }

        private static void create_and_set_user() {
            User objuser = new User { ID = "0006", UserName = "Andy", Address = "fuzhou-china" };
            bool result = MemcachedClient<User>.Instance.Store(objuser, objuser.ID);
            Console.WriteLine("Store {0} , Result: {1}", objuser.UserName, result.ToString());
        }
    }

  

 对memcached的安装及简单的应用,在实际应用中可以设计到数据的序列化以及数据传递的格式,可以结合Protobuf和json来使用

===================================================================

  

 

posted on 2013-06-27 21:55  mrkrcl  阅读(275)  评论(0)    收藏  举报