• Redis incr实现流水号自动增长


    问题描述:

    Java项目实现流水号自动增长,项目需求中有时需要生成一定规则递增编号:

    eg用户编码自动生成,规则:user+7位数字,每次新增自增长,例:user0000001
    角色编码自动生成,规则:role+7位数字,每次新增自增长,例:role0000001

    实现思路

    实现的基本思路就是项目启动时,从数据库获取当前最大值,作为静态变量存储;
    业务获取新的编码,考虑并发问题,获取编码方法(编码自增部分)为synchronized同步方法,如果自增为原子操作,则无需同步;
    编码前置0,使用String.format(“%07d”, num);格式化获取。
    传入了数据库中最新设备编号,将首先使用Integer的parseInt()方法返回十进制整数,这样就可以对其自增1。

    最简单的可以用Redis的incr来实现这种效果。

    代码案例

    1、生成保险产品的险种编码
    2、规则:保险公司简称首字母+险种大类+主附险标记+8位流水自增长,例:中德安联个险主险,ZDAL 1 0 00000001

    /**
     * 业务实现类
     * @param productCode
     * @param numLength
     * @return
     */
    @Service
    @Slf4j
    public class InsuranceProductServiceImpl{
    	@Override
        @Transactional
    	public String addProduct(ProductInVo product) {
    		//xxxx校验 业务处理
    	    String prex = PinyinUtils.getAlphaDefaultCode(product.getCompanyShortName()) + product.getProductClassify() + product.getMainProductFlag();
    	    String productCode = generateProductCode(prex, 8);
    	    return productCode;
    	}
        /**
    	 *生成编码
    	*/
    	private String generateProductCode(String productCode, int numLength) {
    	    Long code = redisService.incr(ProductKeys.PRODUCT_CODE, productCode);
    	    return productCode + String.format("%0" + numLength + "d", code);
    	}
    }
    	/**
    	 * 公司编码前缀
    	 */
    	public static ProductKeys PRODUCT_CODE = new ProductKeys(10, "product_code:");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    关于获取首字母的工具类,可查看:汉语拼音pinyin4j处理工具类具体说明适用。
    在这里插入图片描述

  • 相关阅读:
    星号倒三角
    glide-源码解析-1
    详解硬盘的接口、总线和协议
    NPDP产品经理知识(市场调研-文化,团队,领导力)
    前k个高频元素_优先队列_java
    毕业了校园卡怎么改套餐?
    2022年最新山东建筑八大员(材料员)模拟真题及答案
    Postman的各种参数你都用对了吗?
    仿牛客网项目第一章:开发社区首页(详细步骤和思路)
    Ubuntu搭建团队文档协作在线平台
  • 原文地址:https://blog.csdn.net/weixin_47061482/article/details/131675971