memcache client 的递增 incr 问题
2014-01-02 17:21
429 查看
转载自:http://blog.csdn.net/mumu_shui/article/details/6048603
在集群环境(两台及以上的web服务)下为了保证自动生成号码(由于号码前缀是根据一些字段值动态拼接成的,故key是不确定的)的惟一性,决定使用memcache的incr。但incr必须在存在key的情况下才能正常工作,故需要进行初始化。为了在集群环境下保证只初始化一次,所以采用memcache的add。样例如下:
private static final long INIT_INCR_RETURN = -1;// 初始增量返回值
/**
* 用缓存实现递增,在集群环境下也不会重复
*
* @param param
* @param step 步长
* @return
*/
protected int incrementInCache(CacheObjectParam<Integer> param, int step) {
String key = param.fetchKey();
long seq = INIT_INCR_RETURN;
while (seq == INIT_INCR_RETURN) {
try {
seq = wrappedCache.incr(key, step);
if (seq == INIT_INCR_RETURN) {
synchronized (this) {
int init = 0;
Integer object = param.fetchObject();
if (object == null) {
init = 0;
} else {
init = object.intValue();
}
wrappedCache.add(key, String.valueOf(init), this);// 必须以string形式保存,否则初始值置不进去
}
}
} catch (Exception e) {
log.error(e.toString());
}
}
return Long.valueOf(seq).intValue();
}
在集群环境(两台及以上的web服务)下为了保证自动生成号码(由于号码前缀是根据一些字段值动态拼接成的,故key是不确定的)的惟一性,决定使用memcache的incr。但incr必须在存在key的情况下才能正常工作,故需要进行初始化。为了在集群环境下保证只初始化一次,所以采用memcache的add。样例如下:
private static final long INIT_INCR_RETURN = -1;// 初始增量返回值
/**
* 用缓存实现递增,在集群环境下也不会重复
*
* @param param
* @param step 步长
* @return
*/
protected int incrementInCache(CacheObjectParam<Integer> param, int step) {
String key = param.fetchKey();
long seq = INIT_INCR_RETURN;
while (seq == INIT_INCR_RETURN) {
try {
seq = wrappedCache.incr(key, step);
if (seq == INIT_INCR_RETURN) {
synchronized (this) {
int init = 0;
Integer object = param.fetchObject();
if (object == null) {
init = 0;
} else {
init = object.intValue();
}
wrappedCache.add(key, String.valueOf(init), this);// 必须以string形式保存,否则初始值置不进去
}
}
} catch (Exception e) {
log.error(e.toString());
}
}
return Long.valueOf(seq).intValue();
}
相关文章推荐
- memcache client 的递增 incr 问题
- memcache client 的递增 incr
- rails的memcache-client 下的namespace不起作用的问题
- 请注意Rails2.3自带的memcache-client有性能问题
- 通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题(报错 http 413 error)
- MQ开发 client联接形式配置问题以及USERID自动被替换为MUSR_MQADMIN的问题解决
- memcache 的安全性问题
- 安装memcache等dll文件时遇到的问题。
- 数组中最长递增子序列问题研究(2)
- 安装memcache等dll文件时遇到的问题。
- [转]通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题
- HttpClient包里面不包含HttpResponse的问题
- 关于用FTPClient资源库上传下载以中文命名的文件的问题
- memcache Client 使用
- UDP 协议 C# UdpClient乱序接收数据包丢失的问题 Socket ReceiveBufferSize
- 在大并发写时,HBase的HDFS DFSClient端报SocketTimeoutException的问题分析和解决
- vSphere Client 编辑虚拟机属性的问题
- WebServer------Client(浏览器)乱码问题
- HP-Unix安装Memcache问题