memcached 的 SockIOPool 概念
池的概念
SockIOPool
首先来看下属性
- SockIOPool属性
boolean initialized = false – 初始化是否完成的标志,只有初始化完成后上层才能正常使用池
int initConn = 10 – 初始化时对每个服务器建立的连接数目
int minConn = 5 – 每个服务器建立最小的连接数,当自查线程发现与某个服务器建立连接数目小于这个数目时
会弥补剩下的连接
int maxConn = 100 -每个服务器建立最大的连接数,当自查线程发现与某个服务器建立连接数目大于这个数目
时就会逐个检查这些连接的空闲时间是否大于maxConn,如果大于会关闭这些连接,直到连接数等于maxConn
long maxIdle = 1000 * 60 * 5 – 最大空闲时间
long maxBusyTime = 1000 * 30 – 最长租用时间,其使用主要有两点,一是自查线程会检查正在被租用的连接,
如果发现已经被租用的时间超过这个值得,会将其从被租用的记录里剔除,并关闭这个连接;另一个应用是
上层进行MUTIL操作时,读取所有的数据的时间不能超过这个时间。
long maintSleep = 1000 * 30 – 自查线程周期进行工作,其每次休眠时间
int socketTO = 1000 * 3 – Socket阻塞读取数据的超时时间
int socketConnectTO = 1000 * 3 - Socket阻塞建立连接的等待时间
boolean aliveCheck = false -根据key&hashCode获取SockIO时,通过hash bucket得到SockIO后,如果这个值
是true会检查Socket是否已经连接,如果连接建立正常还会想服务器发送“version\r\n”的指令,并读取数据,这
个过程没有出错才会返回SockIO给上层用,否则返回NULL。所以一般设置为false。
boolean nagle = false – Socket的参数,如果是true在写数据时不缓冲,立即发送出去
int hashingAlg = NATIVE_HASH – 池的hash bucket方式,主要是分为简单的hashCode取hash bucket数目的模
和一致性哈希,前者在扩容时会造成命中率很大程度的下降,后者的好处是扩容时很大程度减少了缓存的重新
分布
String[] servers – memcached服务器地址配置
Integer[] weights – memcached服务器权重配置
List buckets - hash bucket,一个服务器地址,其权重是N,则往这个bucket中添加N个服务器地址
TreeMap - 其次就是在自己的本地安装一个 memcached
- 建立 MemcacheHelper.cs类
public class MemcacheHelper
{
private readonly static MemcachedClient mc = null;
static MemcacheHelper()
{
string[] serverlist = { "填写装了服务IP地址1", "10.0.0.132:11211" };//有几个写几个//初始化池
SockIOPool pool = SockIOPool.GetInstance();
pool.SetServers(serverlist);pool.InitConnections = 3;
pool.MinConnections = 3;
pool.MaxConnections = 5;pool.SocketConnectTimeout = 1000;
pool.SocketTimeout = 3000;pool.MaintenanceSleep = 30;
pool.Failover = true;pool.Nagle = false;
pool.Initialize();// 获得客户端实例
mc = new MemcachedClient();
mc.EnableCompression = false;
}
/// <summary>
/// 向Memcache中添加数据
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public static bool Set(string key, object value)
{
return mc.Set(key, value);
}
public static bool Set(string key, object value,DateTime time)
{
return mc.Set(key, value,time);
}
/// <summary>
/// 获取数据
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static object Get(string key)
{
return mc.Get(key);
}
/// <summary>
/// 删除
/// </summary>
/// <param name="key"></param>
public static bool Delete(string key)
{
if (mc.KeyExists(key))
{
return mc.Delete(key);
}
return false;
}
} - 现在就可以调用这个方法了。主要就是一个池的概念。
string sessionId = Guid.NewGuid().ToString();//必须保证Memcache的key唯一
Common.MemcacheHelper.Set(sessionId,数据, DateTime.Now.AddMinutes(20));//向Memcache中添加登录用户数据.
Response.Cookies["sessionId"].Value = sessionId;//将自创的SessionId以Cookie的形式返回给浏览器。
memcached 的 SockIOPool 概念的更多相关文章
- 一,memcached的基本概念
1,memcached的基本概念 memcached是一个高效的分布式内存对象缓存系统,它可以支持把各种php的数据(array,对象,基本数据类型)放入到它管理的内存中.简单的说,memcached ...
- Memcached Memcached.ClientLibrary.SockIOPool”的类型初始值设定项引发异常
又一次遭遇"xxx类型初始值设定项引发异常" 下了个c#实现的轻量级IoC开源项目,可是在本地使用时发现一运行就捕捉到"类型初始值设定项引发异常"的异常信息,调 ...
- memcached缓存基本概念
Memcached是一套分布式内存对象缓存系统. 用于在动态应用系统中缓存数据库的数据,减少数据库的访问压力,达到提升网站系统性能的目的:memcached在企业应用场景中一般是用来作为数据库的cac ...
- Python自动化 【第十一篇】:Python进阶-RabbitMQ队列/Memcached/Redis
本节内容: RabbitMQ队列 Memcached Redis 1. RabbitMQ 安装 http://www.rabbitmq.com/install-standalone-mac.htm ...
- Memcached报错
1. ERROR Memcached.ClientLibrary.SockIOPool [(.6271ms 解决办法:据说是因为定期清理应用池的原因.
- java + memcached安装
一:安装 (临时获取上手windows实验) 1.下载memcached.exe , 上F:\memcached\ 下 2.在CMD在输入 "F:\memcached\memcached.e ...
- Java操作Memcached
本文复制其他播客,有好的技术文章希望各位大神能告知... 谢谢. 如何使用Java操作Memcached实例: 代码一: package com.ghj.packageoftool; import j ...
- memcached—Java操作Memcached实例
前面博客介绍了如何在Windows操作系统中安装Memcached,总结一下如何使用Java操作Memcached实例: 代码一: package com.ghj.packageoftool; imp ...
- 华丽的NHibernate
华丽的NHibernate http://www.cnblogs.com/kissdodog/archive/2013/02/21/2919886.html 华丽的NHibernate NHibern ...
随机推荐
- easyui 中iframe嵌套页面,大弹窗自适应居中的解决方法。$('#win').window()
easyui 中iframe嵌套页面,大弹窗自适应居中的解决方法.$('#win').window() 以下是左边栏和头部外层遮罩显示和隐藏方法 /*外层 遮罩显示*/ function wrapMa ...
- <context:component-scan>详解 转发 https://www.cnblogs.com/fightingcoding/p/component-scan.html
<context:component-scan>详解 默认情况下,<context:component-scan>查找使用构造型(stereotype)注解所标注的类,如@ ...
- (转)AIX下镜像制作与取消,更换硬盘问题
AIX下镜像制作与取消,更换硬盘问题 ROOTVG做镜像问题: 下面命令全部在AIX5.4上运行通过 # lspv hdisk0 000a1ddc7f36a2f0 rootvg ...
- python获取动态网站上面的动态加载的数据(selenium+Firefox)
最近突然想到以前爬取百度学术上的参考文献,大家可以看一下以前我的写的博客:http://www.cnblogs.com/ybf-yyj/p/7351493.html,但是如果利用这个方法,太痛苦了,需 ...
- hbase集群中其中某个regionserver 没有启动
第一步: date命令查看各个机器的时间 发现linux02机器时间差了2个多小时 第二步:ntpdate pool.ntp.org 修改错误时间的机器 第三步: 重启 hbase
- 【树】Construct Binary Tree from Preorder and Inorder Traversal
题目: Given preorder and inorder traversal of a tree, construct the binary tree. 思路: 线序序列的第一个元素就是树根,然后 ...
- Android_问卷调查
这个是一个简单的问卷调查,对于我这样的初学者可能会绞尽脑汁想尽办法,去实现一个看起来特别简单的功能,我这个是用Intent传参的办法,来实现将前边的调查来进行统计,并记录,之后将这些信息显示到最后一个 ...
- 初始JAVA中浅拷贝和深拷贝
1. 简单变量的复制 public static void main(String[] args) { int a = 5; int b = a; System.out.println(a); Sys ...
- centos虚拟机网络配置--桥接模式
什么是桥接模式?桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥 进行通信.在桥接的作用下,类似于把物理主机虚拟为一个交换机,所有桥接 设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在 ...
- lintcode-->哈希函数
在数据结构中,哈希函数是用来将一个字符串(或任何其他类型)转化为小于哈希表大小且大于等于零的整数.一个好的哈希函数可以尽可能少地产生冲突.一种广泛使用的哈希函数算法是使用数值33,假设任何字符串都是基 ...