序言

吹吹牛逼先,借我你的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 = ;
//最小连接数
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();
}
}

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[] { , });

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

memcached安装及.NET中的Memcached.ClientLibrary使用详解的更多相关文章

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

    一.安装服务端: 服务端:http://code.jellycan.com/files/memcached-1.2.6-win32-bin.zip 64:http://blog.couchbase.c ...

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

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

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

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

  4. SVN中tag branch trunk用法详解

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

  5. 前端后台以及游戏中使用Google Protocol Buffer详解

    前端后台以及游戏中使用Google Protocol Buffer详解 0.什么是protoBuf protoBuf是一种灵活高效的独立于语言平台的结构化数据表示方法,与XML相比,protoBuf更 ...

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

      转载:http://www.sudu.cn/info/index.php?op=article&id=302529   Linux中/proc目录下文件详解(一) 声明:可以自由转载本文, ...

  7. python中requests库使用方法详解

    目录 python中requests库使用方法详解 官方文档 什么是Requests 安装Requests库 基本的GET请求 带参数的GET请求 解析json 添加headers 基本POST请求 ...

  8. php中流行的rpc框架详解

    什么是RPC框架? 如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call) 那什么是远程调用? 我的官方群点击此处. 通常我们调用一个php中的方法,比如这样一个函数方 ...

  9. python golang中grpc 使用示例代码详解

    python 1.使用前准备,安装这三个库 pip install grpcio pip install protobuf pip install grpcio_tools 2.建立一个proto文件 ...

随机推荐

  1. RabbitMq应用二

    在应用一中,基本的消息队列使用已经完成了,在实际项目中,一定会出现各种各样的需求和问题,rabbitmq内置的很多强大机制和功能会帮助我们解决很多的问题,下面就一个一个的一起学习一下. 消息响应机制 ...

  2. 恢复SQL Server被误删除的数据(再扩展)

    恢复SQL Server被误删除的数据(再扩展) 大家对本人之前的文章<恢复SQL Server被误删除的数据> 反应非常热烈,但是文章里的存储过程不能实现对备份出来的日志备份里所删数据的 ...

  3. Asp.Net MVC中使用StreamReader读取“Post body”之应用场景。

    场景:有三个市场(Global.China.USA),对前台传过来的数据有些验证需要细化到每个市场去完成. 所以就出现了基类(Global)和派生类(China.USA) 定义基类(Global)Pe ...

  4. 使用Zabbix监控Oracle数据库

    Orabbix介绍 监控Oracle数据库我们需要安装第三方提供的Zabbix插件,我们先测试比较有名的Orabbix,http://www.smartmarmot.com/product/orabb ...

  5. dagger2系列之Scope

    Dagger的Scope注解代表的是作用域,通过实现自定义@Scope注解,标记当前生成对象的使用范围,标识一个类型的注射器只实例化一次,在同一个作用域内,只会生成一个实例, 然后在此作用域内共用一个 ...

  6. 使用SwingBench 对Oracle RAC DB性能 压力测试

    我们可以使用swingbench这个工具对数据库性能进行压力测试,得到一些性能指标作为参考. SwingBench下载: http://www.dominicgiles.com/downloads.h ...

  7. 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范

    昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ...

  8. [修正] Firemonkey TFrame 存档后,下次载入某些事件连结会消失(但源码还在)

    问题:Firemonkey TFrame 存档后,下次载入某些事件连结会消失(但源码还在) 解决:(暂时方法) type TTestFrame = class(TFrame) public const ...

  9. 6_Win7下Chrome主页被流氓网站hao123.com劫持后的解决方法。

    今天安装了一个PDF阅读器,免费的,你懂的,结果自己安装的时候没有将默认的选项取消,就被hao123流氓网站劫持啦. 说实话某免费PDF阅读器还算好的,有一个可以供你选择的项.不想某些软件直接就默认选 ...

  10. Greenplum 的分布式框架结构

    Greenplum 的分布式框架结构 1.基本架构 Greenplum(以下简称 GPDB)是一款典型的 Shared-Nothing 分布式数据库系统.GPDB 拥有一个中控节点( Master ) ...