专栏首页逸鹏说道memcached安装及.NET中的Memcached.ClientLibrary使用详解

memcached安装及.NET中的Memcached.ClientLibrary使用详解

序言

吹吹牛逼先,借我你的20分钟,保证你在.net中使用memcached缓存数据,畅通无阻,提升数据读取效率,分担数据库压力,便不在话下。

本篇主要说下:memcached分布式缓存的负载均衡配置比例,数据压缩,socket的详细配置等,以及在.net中的常用方法。

memcached是什么,做什么的,为什么要使用它,本篇不做介绍,建议百度百科,我看拉下,那里比我还能吹牛逼,哈哈,上料。

memcached在windows下的下载与安装

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

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

下载完成后

1、打开SetupFile安装文件夹。

2、打开cmd命令界面。

不要忘啦去windows服务中把服务启动了。

3、 以上的安装和启动都是在默认环境下进行的,在安装时可设置如下参数:

-p 监听的端口 -l 连接的IP地址, 默认是本机 -d start 启动memcached服务 -d restart 重起memcached服务 -d stop|shutdown 关闭正在运行的memcached服务 -d install 安装memcached服务 -d uninstall 卸载memcached服务 -u 以的身份运行 (仅在以root运行的时候有效) -m 最大内存使用,单位MB。默认64MB -M 内存耗尽时返回错误,而不是删除项 -c 最大同时连接数,默认是1024 -f 块大小增长因子,默认是1.25 -n 最小分配空间,key+value+flags默认是48 -h 显示帮助

4、对这样你就安装好啦。下面看我们怎么用c#语言操作memcached啦。

先把memcached用起来

1、下载客户端的3个dll,ICSharpCode.SharpZipLib.dll,log4net.dll,Memcached.ClientLibrary.dll

2、跟着我新建一个简单控制台应用程序

 class AMemcached
    {        public static MemcachedClient cache;        static AMemcached()
        {            string[] servers = { "172.18.5.66: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连接的超时时间,下面设置表示不超时(单位ms),即一直保持链接状态
            pool.SocketConnectTimeout = 0;            //通讯的超市时间,下面设置为3秒(单位ms),.Net版本没有实现
            pool.SocketTimeout = 1000 * 3;            //维护线程的间隔激活时间,下面设置为30秒(单位s),设置为0时表示不启用维护线程
            pool.MaintenanceSleep = 30;            //设置SocktIO池的故障标志
            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;            //压缩设置,超过指定大小的都压缩 
            //cache.CompressionThreshold = 1024 * 1024;                   }
    }    class Program
    {        static void Main(string[] args)
        {            //存入key为a,value为123的一个缓存
            AMemcached.cache.Add("a", "123");            //读出key为a的缓存值
            var s = AMemcached.cache.Get("a");            //输出            Console.WriteLine(s);
            Console.ReadKey();           
        }
    }

Note:首先告诉你一个好的消息,memcached就这么简单,你已经能够使用啦,如果感兴趣,那么在AMemcached.cache的后面加点,看看这个类库里面还有那些关于增删改查重载的好方法。如果你还想再进一步了解,那么继续往下看。

细品 .NET Memcached.ClientLibrary

1、说说memcached分布式缓存的设置与应用

            string[] servers = { "172.18.5.66:11211", "192.168.10.121:11211" };            //初始化池
            SockIOPool pool = SockIOPool.GetInstance();            //设置服务器列表            pool.SetServers(servers);            //各服务器之间负载均衡的设置比例
            pool.SetWeights(new int[] { 1, 10 });

Note:

1、在172.18.5.66,与192.168.10.121两台机器上装memcached服务端。

2、 pool.SetWeights这里的1跟10意思是,负载均衡比例,假如11000条数据,大致数据分布为:172.18.5.66分布1000条数据左右。另外一台为10000条左右。

3、memcached服务端并不具备负载均衡的能力,而是memcachedClient实现的,具体存取数据实现的核心是采用一致性Hash算法,把key-value分布到某一台服务器中里边。

2、说说memcached的数据压缩机制

            //是否启用压缩数据:如果启用了压缩,数据压缩长于门槛的数据将被储存在压缩的形式
            cache.EnableCompression = false;            //压缩设置,超过指定大小的都压缩 
            //cache.CompressionThreshold = 1024 * 1024; 

Note:

1、这个处理是在MemcachedClient对象中,设置这个EnableCompression属性,是否使用压缩的意思,如果启用啦压缩功能 ,则ICSharpCode.SharpZipLib类库会在数据超过预设大小时,进行数据压缩处理。

2、CompressionThreshold这个属性是压缩的阀值,默认是15K,如果超过设定的阀值则使用memcached的通讯协议,存数据时给每个数据项分配一个16为的flag表示,用作记录是否有压缩,如果有压缩则提取数据是进行解压。如果没有超过阀值则不压缩,直接存储。

3、说说怎么使用客户端多个SocketIO池

View Code

Note:使用SocketIoPool的场景,假如你的系统中用到A,B两台机器memcached的缓存数据,而A,B是不相关的,没有数据互通共享,那么这个时候你就可以根据设置poolName来处理读写那台机器。而不用多处,重复配置客户端的各种参数。

4、说说memcached的故障转移处理

           //设置SocktIO池的故障标志
            pool.Failover = true;

Note:memcached的鼓掌转移是一套正常节点发生故障变为死节点时的处理机制。

1、开启故障转移:如果发生socket异常,则该节点被添加到存放死节点属性的_hostDead中,新请求被映射到dead server,检测尝试连接死节点的时间间隔属性_hostDeadDuration(默认设置为100ms),如果没有达到设定的间隔时间则key会被映射到可用的server处理,如果达到了时间间隔,则尝试重新链接,连接成功将此节点从_hostDead中去除,连接失败则间隔时间翻倍存放,下次重新连接时间会被拉长。

2、不开启故障转移:新的请求都会被映射到dead server上,尝试重新建立socket链接,如果连接失败,返回null或者操作失败。

5、说说key-value中的key与value

1、key在服务端的长度限制为250个字符,建议使用较短的key但不要重复。

2、value的大小限制为1mb,如果大拉,可以使用压缩,如果还大,那可能拆分到多个key中。

本文分享自微信公众号 - 我为Net狂(dotNetCrazy),作者:张龙豪

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-11-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 中文分词之结巴分词~~~附使用场景+demo(net)

    常用技能(更新ing):http://www.cnblogs.com/dunitian/p/4822808.html#skill 技能总纲(更新ing):htt...

    逸鹏
  • 圆通wap分站memcache没做ip限制

    漏洞证明: 获取memcache的信息,敏感的是version而已 获取item 获取key 然后其实是可以查询到数据的,用get <key>就行,可是我这里木...

    逸鹏
  • Git技巧:右键菜单怎么去除?

    如果你是按照 http://www.cnblogs.com/dunitian/p/5034624.html 那么你就没有这么多蛋疼的菜单了(反之:vs帮你安装的...

    逸鹏
  • ABAP 防止程序重复执行

    有的程序需要现在同一时间只能运行一个,这种需求可以用锁的方式来实现,在START-OF-SELECTION 事件后加锁,如果是加锁成功,说明还没有程序在执行,如...

    matinal
  • ABAP 防止程序重复执行

    有的程序需要现在同一时间只能运行一个,这种需求可以用锁的方式来实现,在START-OF-SELECTION 事件后加锁,如果是加锁成功,说明还没有程序在执行,如...

    matinal
  • Memcache集群环境下缓存解决方案

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

    奋飛
  • 检测custom settype assign的UI view name

    customer在创建自己的settype时,需要使用tcode CRMM_UIU_PROD_CONFIG 将custom settype 根据其类型assig...

    Jerry Wang
  • verilog常用语法一让您的FPGA设计更轻松

    FPGA 设计的硬件语言Verilog中的参数化有两种关键词:define 和 paramerter,参数化的主要目的是代码易维护、易移植和可读性好。

    FPGA开源工作室
  • 我想到的Netty功能,别人已经实现了

    Netty是年初最先学习的框架,近期的图书租借系统想要用上聊天功能,实现一对一对话聊天,在用户登录服务端时,获取用户ip与id绑定,放入channelgroup...

    疯狂的KK
  • JIT优化之道

    《JIT优化之道》是去年在公司的一次分享,对于公司组织分享我是赞同又不赞同,怎么讲呢?

    码农戏码

扫码关注云+社区

领取腾讯云代金券