序言

吹吹牛逼先,借我你的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啦。

5、telnet   add 0 1 zlh  0:时间(秒,0代表永远),1:字节数 ,zlh:value ,flush_all 清空所有数据。

先把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池

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[] { 1, 10 });//初始化时创建连接数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;// 初始化一些值并与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", 123);//读出key为a的缓存值var s = new AMemcached("me").cache.Get("b");//输出
            Console.WriteLine(s);Console.ReadKey();           }}

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中。

转载于:https://www.cnblogs.com/knowledgesea/p/4940713.html

memcached安装及.NET中的Memcached.ClientLibrary使用详解相关推荐

  1. Tomcat安装、配置、优化及负载均衡详解

    博客园 首页 新随笔 联系 管理 订阅 随笔- 31  文章- 0  评论- 25  Tomcat安装.配置.优化及负载均衡详解 一.常见JavaWeb服务器      1.WebLogic:是BEA ...

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

    Linux中/proc目录下文件详解(一) 声明:可以自由转载本文,但请务必保留本文的完整性. 作者:张子坚 email:zhangzijian@163.com 说明:本文所涉及示例均在fedora ...

  3. python的执行过程_在交互式环境中执行Python程序过程详解

    前言 相信接触过Python的伙伴们都知道运行Python脚本程序的方式有多种,目前主要的方式有:交互式环境运行.命令行窗口运行.开发工具上运行等,其中在不同的操作平台上还互不相同.今天,小编讲些Py ...

  4. tracepro应用实例详解_建筑安装工程造价,高清PPT图文详解,小白也能学会的简单步骤...

    建筑安装工程造价,高清PPT图文详解,小白也能学会的简单流程 工程造价的直意就是工程的建造价格,是指进行某项工程建设所花费的全部费用.工程造价在工程中是很关键的存在,是工程能够取得的关键:对工程建设的 ...

  5. 网页设计中的默认字体样式详解

    浏览器默认的样式往往在不同的浏览器.不同的语言版本甚至不同的系统版本都有不同的设置,这就导致如 果直接利用默认样式的页面在各个浏览器下显示非常不一致,于是就有了类似YUI的reset之类用来尽量重写浏 ...

  6. Linux中/proc目录下文件详解(二)

    Linux中/proc目录下文件详解(二) /proc/mdstat文件 这个文件包含了由md设备驱动程序控制的RAID设备信息. 示例: [root@localhost ~]# cat /proc/ ...

  7. python2与python3性能对比_对Python2与Python3中__bool__方法的差异详解

    对Python2与Python3中__bool__方法的差异详解 发布时间:2020-08-28 00:08:58 来源:脚本之家 阅读:74 作者:grey_csdn 学习Python面向对象编程的 ...

  8. c语言二级指针有什么作用,C语言中二级指针的实例详解

    C语言中二级指针的实例详解 C语言中二级指针的实例详解 用图说明 示例代码: #include int main(int argc, const char * argv[]) { // int a = ...

  9. python xlrd课程_python中xlrd模块的使用详解

    一.xlrd的安装 打开cmd输入pip install xlrd安装完成即可 二.xlrd模块的使用 下面以这个工作簿为例 1.导入模块 import xlrd 2.打开工作薄 # filename ...

最新文章

  1. SAP HANA数据库里对中文字符串排序的实现
  2. Java 8.if语句
  3. creat-react-app 支持 less
  4. 阿里云服务器用Docker配置运行nginx并访问
  5. 迪艾姆python培训视频
  6. C#|图像快速傅立叶变换与反变换
  7. Word——目录显示和标题样式设置
  8. 对多频外差的改进-校正伽马误差
  9. Java开发一年经验北京薪资,全网首发!
  10. 联想z5可以刷鸿蒙系统吗,联想z5引用adb刷Project Treble通刷第三方rom教程(亲测成功)...
  11. 同步和异步修改页面传来的时间类型
  12. Java_7.1 ArrayList应用点名器
  13. JAVA 接入微信扫码(Native)支付
  14. 小组查经分享《创世记》--概述
  15. postman如何做接口关联
  16. 中国在6G专利上再进一步,申请量占比达五成,遥遥领先,美国的希望落空
  17. ESP32使用freeRTOS的消息队列
  18. docker部署flask应用
  19. 超级方便的中英文翻译
  20. HP加易语言数据库,全源码制作的网络验证,可运营,可自行扩展

热门文章

  1. 卸载win10装Ubuntu笔记
  2. python画图代码的输入数据可以取出来_用Python写了个小程序:最小二乘法、读取文件、作图以及数据输出到文件...
  3. Python中int(input(请输入一个数))报错:ValueError: invalid literal for int() with base 10: '2.7'
  4. 深度学习的实用层面 —— 1.6 Dropout正则化
  5. 修改mysql数据库编码(5.7版本)
  6. JDBC简单连接MySQL
  7. 正则-Strip函数
  8. delphi 通过句柄获取exe文本框内容_实战经验:通过NotifyAddrChange侦测网络变化
  9. html 只能输入正数,vue 限制input只能输入正数
  10. python输入姓名 性别身高_python简单实现学生管理系统