C# Memcache集群原理、客户端配置详细解析

概述

  memcache是一套开放源的分布式高速缓存系统。由服务端和客户端组成,以守护程序(监听)方式运行于一个或多个服务器中,随时会接收客户端的连接和操作。memcache主要把数据对象缓存到内存中,通过在内存里维护一个统一的巨大的hash表。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。memcache基于一个存储键/值对的hashmap进行存储对象到内存中。memcache是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

特性:  
  •在 Memcached中可以保存的item数据量是没有限制的,只要内存足够 。
  •Memcached单进程在32位系统中最大使用内存为2G,若在64位系统则没有限制,这是由于32位系统限制单进程最多可使用2G内存,要使用更多内存,可以分多个端口开启多个Memcached进程 。
  •最大30天的数据过期时间,设置为永久的也会在这个时间过期,常量REALTIME_MAXDELTA
  •单个item最大数据是1MB,超过1MB数据不予存储,常量POWER_BLOCK 1048576进行控制

Memcache集群原理

  Memcache:通过客户端驱动实现集群。Redis、MongoDb:通过服务器端实现集群;Memcache初始化驱动的时候,可以给定一个集合,如

1 string[] servers = { "172.20.10.7:11211","172.20.10.8:11211"};

驱动实现集群原理图

Memcache优缺点:

  1、不能作为持久化保存

  2、存储数据有限:1M【大于1M,人为进行分割】

  3、存储只能key-value

  4、集群数据没有复制和同步机制。【奔溃不会影响程序,没有主从复制机制(没有额外复制开销)】

  5、内存回收不是很及时,LRU:未使用内存>过期内存>最近最少使用内存 惰性删除(也算是缺点)

  好了,我们现在大概知道Memcache干什么用的呢,其实方法很简单,请参考我上篇博客:https://www.cnblogs.com/chenyanbin/p/11415368.html

代码实现:

  1、下载dll客户端类库

    地址:https://sourceforge.net/projects/memcacheddotnet/

    百度云盘:

      链接:https://pan.baidu.com/s/1tIkdYdp8rkKtXMeOeT24AA
      提取码:5yk2

  2、引入类库

   3、添加引用

  4、 代码

 1             //分布式Memcached服务器ip 端口
 2             string[] servers = { "172.20.10.7:11211"}; //Memcache机器IP
 3             //初始化池
 4             SockIOPool pool = SockIOPool.GetInstance();
 5             pool.SetServers(servers); //关联连接池
 6             pool.InitConnections = 3; //初始化链接
 7             pool.MinConnections = 3; //最小连接数
 8             pool.MaxConnections = 5; //最大连接数
 9             pool.SocketConnectTimeout = 1000; //Socket超时连接时间
10             pool.SocketTimeout = 3000; //Socket超时时间
11             pool.MaintenanceSleep = 30; //Socket休眠时间
12             pool.Failover = true;
13             pool.Nagle = false;
14             pool.Initialize(); //初始化
15             //客户端实例
16             MemcachedClient mc = new MemcachedClient();
17             mc.EnableCompression = false; //启动压缩
18             mc.Add("keykey", "valuevalue"); //添加
19             //mc.Delete("keykey"); //删除
20             //mc.Set("", ""); //设置
21             //mc.Get(""); //获取

实现:

 

成功

 

 

示例DEMO

链接:https://pan.baidu.com/s/1QhHEO71jMDCbZ72lbFNNcw
提取码:0a5i

如果这篇文章对你有帮助,帮忙推荐下,有不懂的地方欢迎下方留言~~

posted @ 2019-09-01 14:21  陈彦斌  阅读(760)  评论(3编辑  收藏  举报