memcached安装及.NET中的Memcached.ClientLibrary使用详解
序言
吹吹牛逼先,借我你的20分钟,保证你在.net中使用memcached缓存数据,畅通无阻,提升数据读取效率,分担数据库压力,便不在话下。
本篇主要说下:memcached分布式缓存的负载均衡配置比例,数据压缩,socket的详细配置等,以及在.net中的常用方法。
memcached是什么,做什么的,为什么要使用它,本篇不做介绍,建议百度百科,我看拉下,那里比我还能吹牛逼,哈哈,上料。
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啦。
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池
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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(); } }
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中。
相关文章
- 学习ASP.NET MVC(三)——我的第一个ASP.NET MVC 视图
- VS2019打开项目加载失败:无法找到 .NET Core SDK。请检查确保已安装此项且 global.json 中指定的版本(如有)与所安装的版本相匹配
- Windows 8.1 / Windows 10 breaks my ASP.NET / IIS : “Service unavailable”
- 如何从40亿整数中找到不存在的一个 webservice Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库 WPF实战案例-打印 RabbitMQ与.net core(五) topic类型 与 headers类型 的Exchange
- .NET 跨平台RPC框架DotNettyRPC Web后台快速开发框架(.NET Core) EasyWcf------无需配置,无需引用,动态绑定,轻松使用 C# .NET 0配置使用Wcf(半成品) C# .NET Socket 简单实用框架 C# .NET 0命令行安装Windows服务程序
- 释放SQL Server占用的内存 .Net 读取xml UrlReWriter 在web.config中简单的配置
- c#实例化继承类,必须对被继承类的程序集做引用 .net core Redis分布式缓存客户端实现逻辑分析及示例demo 数据库笔记之索引和事务 centos 7下安装python 3.6笔记 你大波哥~ C#开源框架(转载) JSON C# Class Generator ---由json字符串生成C#实体类的工具
- .NET Core快速入门教程 4、使用VS Code开发.NET Core控制台应用程序
- Windows Server2012 R2 无法安装.NET Framework 3.5的解决方法
- Word处理控件Aspose.Words功能演示:使用 C# VB.NET 将 DOCX 转换为 DOC 或将 DOC 转换为 DOCX
- Windows 2012 IIS ASP.NET 安装
- 【asp.net】MVC中cshtml页面Razor语法大全(综合实例)
- (转)解决windows10下无法安装.net framework 3.5,错误代码0x800F081F
- win11安装.NET Framework 3.5的两种方法
- Developing ASP.NET Core Apps by Using Visual Studio Code
- 基于ASP.NET+ SQL Server实现(Web)医院信息管理系统【100010235】
- 在Linux安装ASP.NET Core运行时环境
- SharePoint Server 2013 安装篇 - 如何解决无法找到 .net 4.5 的问题
- Win7系统安装好Axure点击运行报.NET Framework4.0未安装的解决办法
- Win10离线安装.NET Framework 3.5出现0x8024402c错误的解决办法
- #Windows server 2019安装.Net Framework3.5失败0x8024402C
- Win10 IIS 安装.net 4.5
- windows server 2012R2 如何安装 sql server2016(.net framework4.6,KB2919355)
- net framework3.5离线安装
- 在ubuntu16安装supervisor 并 启动 .net core.
- 怎么解决xp系统不能安装NET Framework4.0?