.NET中MemCached使用介绍

阅读目录

1.MemCached是什么?

2.Window中MemCached安装

3.MemCached命令

4.简单示例

 

MemCached是什么  

  MemCached是一个自由开源,高性能,分布式内存对象缓存系统。Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。

       MemCached是一种基于内存的key-value存储,用来存储小块的任意数据。实现原理就是,第一次从数据库获取到结果之后,同时将结果保存在内存中,从而简单对数据库的访问次数,以提高Web应用的速度。

  

Memcached 官网:http://memcached.org/

Window中MemCached安装

下载地址:http://pan.baidu.com/s/1yVILw       提取密码:5gx9

官方网站:http://memcached.org/

下载完成后

1、打开SetupFile安装文件夹。

     

2、以管理员身份打开cmd,输入以下命令

   

3、安装成功之后,要去服务中启动memcached服务。

 

MemCached命令 

MemCached中有很多命令,大概可分为增加、更新、获取和删除缓存数据,下面简单介绍几种常用的命令; 

Set

用于将value(数据值)存储到指定的key(键)中。

如果set的key已经存在,该命令会更新该key所对应的原来的数据,也就是实现了更新的作用。

 

Add

用于将value(数据值)存储到指定的key(键)中。

如果 Add 的 key 已经存在,则不会更新数据,之前的值将仍然保持相同,并且您将获得响应 NOT_STORED

 

Get

Get命令获取存储在 key() 中的 value(数据值) ,如果 key 不存在,则返回空。

 

Delete

用于删除已存在的 key(键)。

 

flush_all 

flush_all 命令用于清理缓存中的所有 key=>value(=>) 对。

该命令提供了一个可选参数 time,用于在制定的时间后执行清理缓存操作。

 

简单示例

新建一个控制台程序,从下载的目录中添加ICSharpCode.SharpZipLib.dll,log4net.dll,Memcached.ClientLibrary.dll三个组件,新建一个MemCached管理类,具体代码如下: 

/// <summary>
    /// 分布式缓存的MemCached管理器
    /// </summary>
    public class MemCachedManager
    {
        public static MemcachedClient cache;

        static MemCachedManager()
        {
            string[] servers = { "172.20.61.195:11211" };
            //初始化池
            SockIOPool pool = SockIOPool.GetInstance();
            //设置服务器列表
            pool.SetServers(servers);
            //设置各服务之间负责均衡的权重
            pool.SetWeights(new int[] { 1 });
            //初始化时创建连接数
            pool.InitConnections = 3;
            //最小连接数
            pool.MinConnections = 3;
            //最大连接数
            pool.MaxConnections = 5;
            //连接的最大空闲时间,下面设置为6个小时(单位为ms),超过这个设置时间,连接会被释放
            pool.MaxIdle = 1000 * 60 * 60 * 6;
            //socket连接的超时时间,为0表示永不超时,即一直保持连接状态
            pool.SocketConnectTimeout = 0;
            //通讯的超时时间,下面设置为3秒,.net版本没有实现
            pool.SocketTimeout = 1000 * 3;
            //维护线程的间隔激活时间,下面设置为30秒(单位s),设置为0时表示不启用维护线程
            pool.MaintenanceSleep = 30;
            //设置SocketIO池的故障标志
            pool.Failover = true;
            //是否对TCP/IP通讯使用nalgle算法,.net版本没有实现
            pool.Nagle = false;
            //socket单次任务的最大时间(单位ms),超过这个时间socket会被强行中断,当前任务失败
            pool.MaxBusy = 1000 * 10;
            pool.Initialize();
            cache = new MemcachedClient();
            //是否启用压缩数据:如果启用了压缩,数据压缩长于门槛的数据将被储存在压缩的形式
            cache.EnableCompression = false;
        }
}
View Code

其中IP是本机地址,端口是固定的,如果有多台服务器用于缓存,在数组列出对应的IP即可。

测试代码:

public static void TestMethod()
        {
            //清除所有的缓存数据
            MemCachedManager.cache.FlushAll();
            
            var v1 = MemCachedManager.cache.Add("a", "123");
            var res1 = MemCachedManager.cache.Get("a");
            Console.WriteLine("第一次Add返回值{0},结果{1}", v1, res1);

            var v2 = MemCachedManager.cache.Add("a", "456");
            var res2 = MemCachedManager.cache.Get("a");
            Console.WriteLine("第二次Add返回值{0},结果{1}", v2, res2);

          
            var v3 = MemCachedManager.cache.Set("a", "789");
            var res3 = MemCachedManager.cache.Get("a");
            Console.WriteLine("Set返回值{0},结果{0}", res3);

            
            var v4 = MemCachedManager.cache.Replace("a", "123");
            var res4 = MemCachedManager.cache.Get("a");
            Console.WriteLine("replace返回值{0},结果{0}", res4);

            var v5 = MemCachedManager.cache.Replace("b", "123");
            Console.WriteLine("replace返回值{0}", v5);

            MemCachedManager.cache.Set("b","456");
            MemCachedManager.cache.Delete("b");
            var v6= MemCachedManager.cache.KeyExists("b");
            Console.WriteLine("Delete之后返回值{0}", v6);
        }
    }
View Code

运行结果:

 

posted @ 2016-12-27 21:48  齐_大圣  阅读(2969)  评论(0编辑  收藏  举报