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

    }

memcache client 的递增 incr 问题的更多相关文章

  1. PHP memcache client封装

    config.inc.php $CONFIG_MEMCACHE['default'] = array( //'127.0.0.1:11211:100', '10.9.20.73:11211:100', ...

  2. Memcache,redis,rabbitMQ,SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  3. Memcache&Redis

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.减少数据库读取次数来提高网站速度 先在一台机器安装memcache 然后使用Python 安装pip3 i ...

  4. RabbitMQ、Redis、Memcache

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  5. Python之路:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  6. Redis、Memcache

    ★ Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sor ...

  7. 【转】Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  8. redis memcache rabbitMQ

    Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动 ...

  9. python操作RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

随机推荐

  1. 接口和lambda表达式笔记

    接口 接口是双方,即服务提供方和想让它们的对象对服务是可用的那些类,之间约定的一种机制. 声明一个接口 public interface IntSequence{ //不提供实现,则该方法为抽象方法, ...

  2. TreeMap与LinkedHashMap的区别

    TreeMap是根据元素的内部比较器进行排序的,它可以根据key值的大小排序: LinkedHashMap是保持存放顺序的. TreeMap采用红黑树算法,遍历效率高: LinkedHashMap采用 ...

  3. 关于 js 对象 转 字符串 和 深拷贝 的探讨

    随着更多语言的支持 **json** 作为数据传输和存储的媒体,已经非常成熟且应用广泛.却存在致命硬伤,不携带 **对象方法** .在数据传输和存储中,这是恰当的和合理的. 但是在更多的应用场景中,又 ...

  4. malloc分配失败的两个现象

    在实际代码中,malloc的反复分配释放,可能会导致某一次malloc分配失败,虽然上一次调用malloc分配成功(然后释放),下一次在相同地方调用malloc分配可能会失败,疑问在于,既然上一次分配 ...

  5. 形象的理解Strong和Weak

    Strong Weak

  6. BZOJ1270[BJWC2008]雷涛的小猫

    雷涛同学非常的有爱心,在他的宿舍里,养着一只因为受伤被救助的小猫(当然,这样的行为是违反学生宿舍管理条例的).在他的照顾下,小猫很快恢复了健康,并且愈发的活泼可爱了. 可是有一天,雷涛下课回到寝室,却 ...

  7. 03-Mysql数据库----安装与管理

    本节掌握内容: mysql的安装.启动 mysql破解密码 统一字符编码 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流行的 ...

  8. (转)Unreal Networking Guide Created by Zach Metcalf

        2. 3.                                                        

  9. python 动态函数调用及可变参数传入

    定义类及方法 class ParameterFactory(object): ..... def fullLinkTag(self, fromDate, toDate, status, cate='全 ...

  10. LINUX系统下Java和Scala的环境配置

    最近,笔者在研究一个有关“自然语言处理”的项目,在这个项目中,需要我们用Spark进行编程.而Spark内核是由Scala语言开发的,所以在使用Spark之前,我们必须配置好Scala,而Scala又 ...