zoukankan      html  css  js  c++  java
  • memcache client 的递增 incr 问题

    转载自: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();
        }


  • 相关阅读:
    bzoj2595 / P4294 [WC2008]游览计划
    bzoj4698 / P2463 [SDOI2008]Sandy的卡片
    [bzoj3514]Codechef MARCH14 GERALD07加强版
    [bzoj2440][中山市选2011]完全平方数
    [bzoj2243][SDOI2011]染色
    [bzoj2589]Spoj 10707 Count on a tree II
    [bzoj1452] [JSOI2009]Count
    [bzoj2588][Spoj 10628] Count on a tree
    [bzoj2434][Noi2011]阿狸的打字机
    Codeforces Round #408(div.2)
  • 原文地址:https://www.cnblogs.com/ycpanda/p/3637355.html
Copyright © 2011-2022 走看看