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、新建一个简单控制台应用程序

  1. class AMemcached
  2. {
  3. public static MemcachedClient cache;
  4. static AMemcached()
  5. {
  6. string[] servers = { "172.18.5.66:11211" };
  7. //初始化池
  8. SockIOPool pool = SockIOPool.GetInstance();
  9. //设置服务器列表
  10. pool.SetServers(servers);
  11. //各服务器之间负载均衡的设置比例
  12. pool.SetWeights(new int[] { });
  13. //初始化时创建连接数
  14. pool.InitConnections = ;
  15. //最小连接数
  16. pool.MinConnections = ;
  17. //最大连接数
  18. pool.MaxConnections = ;
  19. //连接的最大空闲时间,下面设置为6个小时(单位ms),超过这个设置时间,连接会被释放掉
  20. pool.MaxIdle = * * * ;
  21. //socket连接的超时时间,下面设置表示不超时(单位ms),即一直保持链接状态
  22. pool.SocketConnectTimeout = ;
  23. //通讯的超市时间,下面设置为3秒(单位ms),.Net版本没有实现
  24. pool.SocketTimeout = * ;
  25. //维护线程的间隔激活时间,下面设置为30秒(单位s),设置为0时表示不启用维护线程
  26. pool.MaintenanceSleep = ;
  27. //设置SocktIO池的故障标志
  28. pool.Failover = true;
  29. //是否对TCP/IP通讯使用nalgle算法,.net版本没有实现
  30. pool.Nagle = false;
  31. //socket单次任务的最大时间(单位ms),超过这个时间socket会被强行中端掉,当前任务失败。
  32. pool.MaxBusy = * ;
  33. pool.Initialize();
  34. cache = new MemcachedClient();
  35. //是否启用压缩数据:如果启用了压缩,数据压缩长于门槛的数据将被储存在压缩的形式
  36. cache.EnableCompression = false;
  37. //压缩设置,超过指定大小的都压缩
  38. //cache.CompressionThreshold = 1024 * 1024;
  39. }
  40. }
  41. class Program
  42. {
  43. static void Main(string[] args)
  44. {
  45. //存入key为a,value为123的一个缓存
  46. AMemcached.cache.Add("a", "");
  47. //读出key为a的缓存值
  48. var s = AMemcached.cache.Get("a");
  49. //输出
  50. Console.WriteLine(s);
  51. Console.ReadKey();
  52. }
  53. }

细品 .NET Memcached.ClientLibrary

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

  1. string[] servers = { "172.18.5.66:11211", "192.168.10.121:11211" };
  2. //初始化池
  3. SockIOPool pool = SockIOPool.GetInstance();
  4. //设置服务器列表
  5. pool.SetServers(servers);
  6. //各服务器之间负载均衡的设置比例
  7. 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的数据压缩机制

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

Note:

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

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

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

  1. class AMemcached
  2. {
  3. public MemcachedClient cache;
  4. public AMemcached(string poolName)
  5. {
  6. string[] servers = { "172.18.5.66:11211", "192.168.10.121:11211" };
  7. //初始化池
  8. SockIOPool pool = SockIOPool.GetInstance(poolName);
  9. //设置服务器列表
  10. pool.SetServers(servers);
  11. //各服务器之间负载均衡的设置比例
  12. pool.SetWeights(new int[] { , });
  13. //初始化时创建连接数
  14. pool.InitConnections = ;
  15. //最小连接数
  16. pool.MinConnections = ;
  17. //最大连接数
  18. pool.MaxConnections = ;
  19. //连接的最大空闲时间,下面设置为6个小时(单位ms),超过这个设置时间,连接会被释放掉
  20. pool.MaxIdle = * * * ;
  21. //socket连接的超时时间,下面设置表示不超时(单位ms),即一直保持链接状态
  22. pool.SocketConnectTimeout = ;
  23. //通讯的超时时间,下面设置为3秒(单位ms),.Net版本没有实现
  24. pool.SocketTimeout = * ;
  25. //维护线程的间隔激活时间,下面设置为30秒(单位s),设置为0时表示不启用维护线程
  26. pool.MaintenanceSleep = ;
  27. //设置SocktIO池的故障标志
  28. pool.Failover = true;
  29. //是否对TCP/IP通讯使用nalgle算法,.net版本没有实现
  30. pool.Nagle = false;
  31. //socket单次任务的最大时间(单位ms),超过这个时间socket会被强行中端掉,当前任务失败。
  32. pool.MaxBusy = * ;
  33. // 初始化一些值并与MemcachedServer段建立连接
  34. pool.Initialize();
  35. cache = new MemcachedClient();
  36. //是否启用压缩数据:如果启用了压缩,数据压缩长于门槛的数据将被储存在压缩的形式
  37. cache.EnableCompression = false;
  38. //压缩设置,超过指定大小的都压缩
  39. //cache.CompressionThreshold = 1024 * 1024;
  40. //指定客户端访问的SockIO池
  41. cache.PoolName = poolName;
  42. }
  43.  
  44. }
  45. class Program
  46. {
  47. static void Main(string[] args)
  48. {
  49. //存入key为a,value为123的一个缓存
  50. new AMemcached("me").cache.Add("b", );
  51. //读出key为a的缓存值
  52. var s = new AMemcached("me").cache.Get("b");
  53. //输出
  54. Console.WriteLine(s);
  55. Console.ReadKey();
  56. }
  57. }

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

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

  1. //设置SocktIO池的故障标志
  2. 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使用详解的更多相关文章

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

    序言 吹吹牛逼先,借我你的20分钟,保证你在.net中使用memcached缓存数据,畅通无阻,提升数据读取效率,分担数据库压力,便不在话下. 本篇主要说下:memcached分布式缓存的负载均衡配置 ...

  2. C#:memcached安装及.NET中的Memcached.ClientLibrary使用详解

    memcached分布式缓存的负载均衡配置比例,数据压缩,socket的详细配置等,以及在.net中的常用方法. 下载地址:http://pan.baidu.com/s/1yVILw       提取 ...

  3. memcached 命令操作详解

    memcached 命令操作详解 一.存储命令 存储命令的格式: <command name> <key> <flags> <exptime> < ...

  4. Linux中/proc目录下文件详解

    转载于:http://blog.chinaunix.net/uid-10449864-id-2956854.html Linux中/proc目录下文件详解(一)/proc文件系统下的多种文件提供的系统 ...

  5. JQuery在循环中绑定事件的问题详解

    JQuery在循环中绑定事件的问题详解 有个页面上需要N个DOM,每个DOM里面的元素ID都要以数字结尾,比如说 ? 1 2 3 <input type="text" nam ...

  6. C#中的Linq to Xml详解

    这篇文章主要介绍了C#中的Linq to Xml详解,本文给出转换步骤以及大量实例,讲解了生成xml.查询并修改xml.监听xml事件.处理xml流等内容,需要的朋友可以参考下 一.生成Xml 为了能 ...

  7. 批处理中的echo命令图文详解

    批处理中的echo命令图文详解 1. Echo 显示当前ECHO的状态:ECHO ON 或者ECHO OFF 2. ECHO ON 将ECHO状态设置为ON,将显示命令行,也就是前面的C:\>类 ...

  8. C#中的预处理器指令详解

    这篇文章主要介绍了C#中的预处理器指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregio ...

  9. SVN中tag branch trunk用法详解

    SVN中tag branch trunk用法详解 2010-05-24 18:32 佚名 字号:T | T 本文向大家简单介绍一下SVN中tag branch trunk用法,SVN中tag bran ...

随机推荐

  1. 完成Matrix丶Kingdom PPT后的感想

    这次Presentation是我在这节课的第一次上台演讲,让我感悟良多. 具体对我的PPT有兴趣的朋友可以call我,我会共享给大家. 这次老师布置的任务对我而言很有意义.首先,我作为最后一组,我欣赏 ...

  2. 获取Ca证书相关与服务器信息

    Request.ServerVariables["Url"] 返回服务器地址 Request.ServerVariables["Path_Info"] 客户端提 ...

  3. c++ 顺序容器适配器

    第一次看到stack,以为它是一个和vector同等地位的容器,其实不是 官方解释:stacks are a type of container adaptor, specifically desig ...

  4. javascript常用数组算法总结

    1.数组去重 方法1: JavaScript //利用数组的indexOf方法 function unique (arr) { var result = []; for (var i = 0; i & ...

  5. hexo环境变量的配置问题

    因为一些个人原因,想尝试在github上用hexo搭建一个博客,于是用npm安装,安装完成之后却一直无法确认hexo的版本问题,cmd中也一直提示hexo -v 不是有效的命令行,在重装了几次Node ...

  6. FreeMarker操作符

    操作字符串函数 1. substring(start,end)从一个字符串中截取子串 start:截取子串开始的索引,start必须大于等于0,小于等于end end: 截取子串的长度,end必须大于 ...

  7. HowTo系列之virtualenv

    1. 简介 virtualenv是一个用于创建Python独立运行环境的命令行工具. 在我们使用python进行开发的时候,我们会依赖不同的Python版本和不同的库版本.当我们的项目需要依赖别的开发 ...

  8. LoadRunner迭代与并发的理解

    ---恢复内容开始--- 四车道的马路,如果只有四辆车并排走过就是并发:  如果四辆车排成一纵队走过就是迭代:  如果有100辆车排成25行依次走过就是并发加迭代.  在以上说法中,只有并排的车是我们 ...

  9. python 获取html源代码里标签之间的文本用get_text()

    例: 输出<span class="w-txt">分享</span>中的文本"分享" contents = bsObj.find_all ...

  10. 浅谈P NP NPC

    P问题:多项式时间内可以找到解的问题,这个解可以在多项式时间内验证. NP问题:有多项式时间内可以验证的解的问题,而并不能保证可以在多项式时间内找到这个解. 比如汉密尔顿回路,如果找到,在多项式时间内 ...