基于redis的自增id

  • 先说需求:一个编号,每天从000-999,超过999后拒绝交易
  • 难处,数据库是mysql没有sequence,字段不是自增的,因为,生成的编号前缀还有一些年月日加其他的一些东西,最后想到的是redis的自增id
  • 使用的springdataredis中的RedisAtomicLong,根据key值获取,从0开始,每次获取一个自增的long类型的数字;实现方法
/**
     * 获取自增id,有效时间为当天,
     * @param key
     * @return
     */
    public String getAutoId(String key){
        String id;
        if (redisTemplate.getConnectionFactory() !=null){
            RedisAtomicLong aLong = new RedisAtomicLong(key,redisTemplate.getConnectionFactory());
            long andIncrement = aLong.getAndIncrement();
            aLong.expireAt(getEndTime());
            id = String.valueOf(andIncrement);
        }else {
            throw new RuntimeException("系统异常,请联系客服");
        }
        return id;
    }

    /**
     * 获取当天的最后时间
     * @return
     */
    public static Date getEndTime() {
        Calendar todayEnd = Calendar.getInstance();
        todayEnd.setTime(todayEnd.getTime());
        todayEnd.set(11, 23);
        todayEnd.set(12, 59);
        todayEnd.set(13, 59);
        return todayEnd.getTime();
    }
  • 最后在使用时做判断,获取长度,不足三位的前补零,大于等于四位的throw 异常,拒绝交易!
相关推荐
©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页