• 首页
  • 邻居
  • 关于
  • 归档
  • 搜索
  • 夜间模式
    ©2020-2026  我的学习笔记 Theme by OneBlog

    我的学习笔记博客

    搜索
    标签
    # 随笔 # Java # 教程 # openwrt # Mysql # SQL # 爬虫 # post # Js调优 # MAVEN
  • 首页>
  • Java>
  • 正文
  • redis+mysql生成商品的唯一货号 带自动递增

    2024年09月12日 1.1 k 阅读 0 评论 1655 字

    如果redis数据被丢失,则从数据库查询出最大数值保存到redis在自增

      // 生成递增的货号逻辑
        public String generateProductCode() {
            lock.lock();  // 加锁,确保多线程安全
            try {
                // 从 Redis 获取当前货号,如果 Redis 中不存在,初始化货号
                String currentCodeStr = redisTemplate.opsForValue().get(PRODUCT_CODE_KEY);
                if (currentCodeStr == null) {
                    // 从数据库中获取当前最大的货号
                    Integer maxCode = productMapper.findMaxProductCode();
                    if (maxCode == null) {
                        maxCode = 0;  // 如果数据库中没有数据,从 0 开始
                    }
                    // 初始化 Redis 中的货号为数据库中的最大值
                    redisTemplate.opsForValue().set(PRODUCT_CODE_KEY, maxCode.toString());
                }
    
                // 使用 Redis 的 INCR 命令自增货号
                Long newCode = redisTemplate.opsForValue().increment(PRODUCT_CODE_KEY);
                return String.format("%08d", newCode);  // 格式化为 8 位数字
            } finally {
                lock.unlock();  // 解锁
            }
        }
     // 生成递增的货号
            String productCode = generateProductCode();
            product.setItemNumberPrefix("ZML");
            product.setItemNumber(productCode);
     private static final String PRODUCT_CODE_KEY = "product:code";  // Redis 中货号的 key
    private final Lock lock = new ReentrantLock();  // 创建一个 ReentrantLock 锁
    
        @Autowired
        private StringRedisTemplate redisTemplate;
     // 查询当前数据库中最大的货号
        @Select("SELECT MAX(p.item_number) FROM Product p")
        Integer findMaxProductCode();

    为了方便查询我是把编号和编号前缀分成了两个字段保存

    private String itemNumberPrefix;
    @ApiModelProperty(value = "商品货号")
    private String itemNumber;
    
    本文著作权归作者 [ admin ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。
    取消回复

    发表留言
    回复

    首页邻居关于归档
    Copyright©2020-2026  All Rights Reserved.  Load:0.016 s
    京ICP备18019712号
    Theme by OneBlog V3.6.5
    夜间模式

    开源不易,请尊重作者版权,保留基本的版权信息。