NET中的Memcached.ClientLibrary使用详解
memcached在windows下的下载与安装
下载地址:http://pan.baidu.com/s/1yVILw 提取密码:5gx9
下载完成后
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[] { });
- //初始化时创建连接数
- pool.InitConnections = ;
- //最小连接数
- pool.MinConnections = ;
- //最大连接数
- pool.MaxConnections = ;
- //连接的最大空闲时间,下面设置为6个小时(单位ms),超过这个设置时间,连接会被释放掉
- pool.MaxIdle = * * * ;
- //socket连接的超时时间,下面设置表示不超时(单位ms),即一直保持链接状态
- pool.SocketConnectTimeout = ;
- //通讯的超市时间,下面设置为3秒(单位ms),.Net版本没有实现
- pool.SocketTimeout = * ;
- //维护线程的间隔激活时间,下面设置为30秒(单位s),设置为0时表示不启用维护线程
- pool.MaintenanceSleep = ;
- //设置SocktIO池的故障标志
- pool.Failover = true;
- //是否对TCP/IP通讯使用nalgle算法,.net版本没有实现
- pool.Nagle = false;
- //socket单次任务的最大时间(单位ms),超过这个时间socket会被强行中端掉,当前任务失败。
- pool.MaxBusy = * ;
- 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", "");
- //读出key为a的缓存值
- var s = AMemcached.cache.Get("a");
- //输出
- Console.WriteLine(s);
- Console.ReadKey();
- }
- }
细品 .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[] { , });
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池
- class AMemcached
- {
- public MemcachedClient cache;
- public AMemcached(string poolName)
- {
- string[] servers = { "172.18.5.66:11211", "192.168.10.121:11211" };
- //初始化池
- SockIOPool pool = SockIOPool.GetInstance(poolName);
- //设置服务器列表
- pool.SetServers(servers);
- //各服务器之间负载均衡的设置比例
- pool.SetWeights(new int[] { , });
- //初始化时创建连接数
- pool.InitConnections = ;
- //最小连接数
- pool.MinConnections = ;
- //最大连接数
- pool.MaxConnections = ;
- //连接的最大空闲时间,下面设置为6个小时(单位ms),超过这个设置时间,连接会被释放掉
- pool.MaxIdle = * * * ;
- //socket连接的超时时间,下面设置表示不超时(单位ms),即一直保持链接状态
- pool.SocketConnectTimeout = ;
- //通讯的超时时间,下面设置为3秒(单位ms),.Net版本没有实现
- pool.SocketTimeout = * ;
- //维护线程的间隔激活时间,下面设置为30秒(单位s),设置为0时表示不启用维护线程
- pool.MaintenanceSleep = ;
- //设置SocktIO池的故障标志
- pool.Failover = true;
- //是否对TCP/IP通讯使用nalgle算法,.net版本没有实现
- pool.Nagle = false;
- //socket单次任务的最大时间(单位ms),超过这个时间socket会被强行中端掉,当前任务失败。
- pool.MaxBusy = * ;
- // 初始化一些值并与MemcachedServer段建立连接
- pool.Initialize();
- cache = new MemcachedClient();
- //是否启用压缩数据:如果启用了压缩,数据压缩长于门槛的数据将被储存在压缩的形式
- cache.EnableCompression = false;
- //压缩设置,超过指定大小的都压缩
- //cache.CompressionThreshold = 1024 * 1024;
- //指定客户端访问的SockIO池
- cache.PoolName = poolName;
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- //存入key为a,value为123的一个缓存
- new AMemcached("me").cache.Add("b", );
- //读出key为a的缓存值
- var s = new AMemcached("me").cache.Get("b");
- //输出
- Console.WriteLine(s);
- Console.ReadKey();
- }
- }
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中的Memcached.ClientLibrary使用详解的更多相关文章
- memcached安装及.NET中的Memcached.ClientLibrary使用详解
序言 吹吹牛逼先,借我你的20分钟,保证你在.net中使用memcached缓存数据,畅通无阻,提升数据读取效率,分担数据库压力,便不在话下. 本篇主要说下:memcached分布式缓存的负载均衡配置 ...
- C#:memcached安装及.NET中的Memcached.ClientLibrary使用详解
memcached分布式缓存的负载均衡配置比例,数据压缩,socket的详细配置等,以及在.net中的常用方法. 下载地址:http://pan.baidu.com/s/1yVILw 提取 ...
- memcached 命令操作详解
memcached 命令操作详解 一.存储命令 存储命令的格式: <command name> <key> <flags> <exptime> < ...
- Linux中/proc目录下文件详解
转载于:http://blog.chinaunix.net/uid-10449864-id-2956854.html Linux中/proc目录下文件详解(一)/proc文件系统下的多种文件提供的系统 ...
- JQuery在循环中绑定事件的问题详解
JQuery在循环中绑定事件的问题详解 有个页面上需要N个DOM,每个DOM里面的元素ID都要以数字结尾,比如说 ? 1 2 3 <input type="text" nam ...
- C#中的Linq to Xml详解
这篇文章主要介绍了C#中的Linq to Xml详解,本文给出转换步骤以及大量实例,讲解了生成xml.查询并修改xml.监听xml事件.处理xml流等内容,需要的朋友可以参考下 一.生成Xml 为了能 ...
- 批处理中的echo命令图文详解
批处理中的echo命令图文详解 1. Echo 显示当前ECHO的状态:ECHO ON 或者ECHO OFF 2. ECHO ON 将ECHO状态设置为ON,将显示命令行,也就是前面的C:\>类 ...
- C#中的预处理器指令详解
这篇文章主要介绍了C#中的预处理器指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregio ...
- SVN中tag branch trunk用法详解
SVN中tag branch trunk用法详解 2010-05-24 18:32 佚名 字号:T | T 本文向大家简单介绍一下SVN中tag branch trunk用法,SVN中tag bran ...
随机推荐
- 完成Matrix丶Kingdom PPT后的感想
这次Presentation是我在这节课的第一次上台演讲,让我感悟良多. 具体对我的PPT有兴趣的朋友可以call我,我会共享给大家. 这次老师布置的任务对我而言很有意义.首先,我作为最后一组,我欣赏 ...
- 获取Ca证书相关与服务器信息
Request.ServerVariables["Url"] 返回服务器地址 Request.ServerVariables["Path_Info"] 客户端提 ...
- c++ 顺序容器适配器
第一次看到stack,以为它是一个和vector同等地位的容器,其实不是 官方解释:stacks are a type of container adaptor, specifically desig ...
- javascript常用数组算法总结
1.数组去重 方法1: JavaScript //利用数组的indexOf方法 function unique (arr) { var result = []; for (var i = 0; i & ...
- hexo环境变量的配置问题
因为一些个人原因,想尝试在github上用hexo搭建一个博客,于是用npm安装,安装完成之后却一直无法确认hexo的版本问题,cmd中也一直提示hexo -v 不是有效的命令行,在重装了几次Node ...
- FreeMarker操作符
操作字符串函数 1. substring(start,end)从一个字符串中截取子串 start:截取子串开始的索引,start必须大于等于0,小于等于end end: 截取子串的长度,end必须大于 ...
- HowTo系列之virtualenv
1. 简介 virtualenv是一个用于创建Python独立运行环境的命令行工具. 在我们使用python进行开发的时候,我们会依赖不同的Python版本和不同的库版本.当我们的项目需要依赖别的开发 ...
- LoadRunner迭代与并发的理解
---恢复内容开始--- 四车道的马路,如果只有四辆车并排走过就是并发: 如果四辆车排成一纵队走过就是迭代: 如果有100辆车排成25行依次走过就是并发加迭代. 在以上说法中,只有并排的车是我们 ...
- python 获取html源代码里标签之间的文本用get_text()
例: 输出<span class="w-txt">分享</span>中的文本"分享" contents = bsObj.find_all ...
- 浅谈P NP NPC
P问题:多项式时间内可以找到解的问题,这个解可以在多项式时间内验证. NP问题:有多项式时间内可以验证的解的问题,而并不能保证可以在多项式时间内找到这个解. 比如汉密尔顿回路,如果找到,在多项式时间内 ...