您的位置:首页 > 数据库 > Memcache

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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: