Javaは注文番号のアイデアを生成します

业务场景 比如说我们在秒杀中需要按天生成的订单号 但是此时只是生成这个订单号不需要做到将订单号入库  可以采用redis 实现
    @Override
    public String createOrderNo() {
    
    
        try {
    
    
            //默认1500,redis分布式基于不同的业务进行加锁
            boolean islock = cacheImpl.lock(ConstantKeyConstant.REDIS_LOCK_ORDER + busInessType, null);
            if (!islock)
                throw new ServiceException(busInessType+"业务的订单创建出现错误,请稍后重试!");

            String timeStr =LocalDate.now().toString().replaceAll("-","");
            //组合出当天的Key
            String redisKey = busInessType+"_"+timeStr;
           //用当天的时间进行自增
            Long noCount=stringRedisTemplate.opsForValue().increment(redisKey,1);
            String orderNo ;

            //预计每天订单不超过1百万单
            int num = 1000000;
            if( noCount < num){
    
    
                orderNo  = "000000" + noCount;
                //补0操作
                orderNo = orderNo.substring(orderNo.length()-6,orderNo.length());
            }else{
    
    
                orderNo = String.valueOf(noCount);
            }
            orderNo=timeStr+orderNo;
            return orderNo;
        } finally {
    
    

        cacheImpl.unLock(ConstantKeyConstant.REDIS_LOCK_ORDER + busInessType);
        }



    }
 private  String generateSn(String key){
    
    

        String timeStr = DateUtil.toString(new Date(),"yyyyMMdd");
        //组合出当天的Key
        String redisKey = key+"_"+timeStr;

        //用当天的时间进行自增
        Long snCount=stringRedisTemplate.opsForValue().increment(redisKey,1);
        String sn ;

        //预计每天订单不超过1百万单
        int num = 1000000;
        if( snCount < num){
    
    
            sn  = "000000" + snCount;
            sn = sn.substring(sn.length()-6,sn.length());
        }else{
    
    
            sn = String.valueOf(snCount);
        }
        sn=timeStr+sn;
        return sn;
    }
//  可以传不同的作为缓存 比如订单 交易之类的 用于区分

当然、redisは翌日にクリアする必要があります

  @Override
    public void cleanCache() {
    
    
        Date yesterday = getYesterday();
        String timeStr = DateUtil.toString(yesterday,"yyyyMMdd");
        stringRedisTemplate.delete(CachePrefix.TRADE_SN_CACHE_PREFIX.getPrefix()+"_"+timeStr);
        stringRedisTemplate.delete(CachePrefix.ORDER_SN_CACHE_PREFIX.getPrefix()+"_"+timeStr);
    }

おすすめ

転載: blog.csdn.net/weixin_43689953/article/details/110621281