redis 生成序列号方法

spring boot redis 集群节点配置:

yml文件配置 redis:
    cluster:
      nodes:
      - Ip:端口1,Ip:端口2,Ip:端口3,Ip:端口4,Ip:端口5
     
    # Redis服务器连接密码(默认为空)
    password: 
    # Redis数据库索引(默认为0)
    database: 0
    # 连接超时时间,2.0 中该参数的类型为Duration,这里在配置的时候需要指明单位
    timeout: 10s
    # 连接池配置,2.0中直接使用jedis或者lettuce配置连接池
    jedis:
      pool:
        # 连接池最大连接数(使用负值表示没有限制)
        max-active: -1
        # 连接池中的最大空闲连接
        max-idle: 50
        # 连接池中的最小空闲连接
        min-idle: 0
        # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: 1ms

 

 

/**
        *     自增序列号
     * @param key    前缀
     * @param numLength 要生成多少位的数字
     * @return
     */
    public synchronized  String seqGenerator(String key, int numLength) {
        String upperCode = "";
        Long size = redisTemplate.opsForList().size(key);//查找以prefix作为key值的数据长度
        if (size > 0) {//有数据
            List leve = redisTemplate.opsForList().range(key, 0, -1);//获取该key下面的所有值 (-1所有值;1下一个值)
            upperCode = leve.get(leve.size() - 1).toString();//返回最后一个值
        }
        String returnCode = "";
        int Suffix;//后缀数字
        if (!StringUtil.isEmpty(upperCode)) {//有数据
            String sequence = upperCode.substring(key.length());//截取前缀开始的后面数字
            Suffix = Integer.parseInt(sequence);
            Suffix++;//最后的序号加一
        } else {//没有数据
            Suffix = 1;
        }
        returnCode = String.format("%0" + numLength + "d", Suffix);//后缀不够numLength长,前面补充0
        redisTemplate.opsForList().rightPush(key, returnCode);//存入Redis
        return returnCode;
    }

 

/**
        *     自增序列号
     * @param key    前缀
     * @param numLength 要生成多少位的数字
     * @return
     */
    public synchronized static String seqGeneratorByRedisAtomicLong(String key, int numLength) {
        String upperCode = "";
        RedisAtomicLong counter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
        long result =  counter.incrementAndGet();
        upperCode = String.format("%0" + numLength + "d", result);//后缀不够numLength长,前面补充0
        return upperCode;
    }

你可能感兴趣的:(redis 生成序列号方法)