当前位置: 首页 > news >正文

SpringBoot+Redis全局唯一ID生成器


📦 优雅版 Redis ID 生成器工具类

支持:

  • 项目启动时自动初始化起始值
  • 获取自增 ID 方法
  • yml 配置化起始值
  • 可灵活扩展多业务线 ID

📌 application.yml 配置

id-generator:member-start-value: 1000000000

📌 配置类:IdGeneratorProperties.java

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;/*** Redis ID生成器相关配置*/
@Data
@Component
@ConfigurationProperties(prefix = "id-generator")
public class IdGeneratorProperties {/*** 会员ID生成器初始值*/private Long memberStartValue;
}

📌 工具类:RedisIdInitializer.java

import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;/*** Redis ID生成器初始化 & 获取工具类** 功能:* 1. 项目启动时,自动初始化自增ID起始值* 2. 提供获取下一个会员ID的方法** 优势:* - 保证全局唯一、线程安全、自增递增* - 配置化管理,灵活可控* - 起始值高位,避免与老数据冲突*/
@Component
@RequiredArgsConstructor
public class RedisIdInitializer {private final StringRedisTemplate stringRedisTemplate;private final IdGeneratorProperties idGeneratorProperties;/*** Redis中会员ID生成器的key*/private static final String MEMBER_ID_KEY = "member:id:generator";/*** 项目启动时自动执行,初始化会员ID起始值*/@PostConstructpublic void initMemberIdStartValue() {// 检查 key 是否已存在,防止覆盖已用值Boolean hasKey = stringRedisTemplate.hasKey(MEMBER_ID_KEY);if (Boolean.FALSE.equals(hasKey)) {stringRedisTemplate.opsForValue().set(MEMBER_ID_KEY, String.valueOf(idGeneratorProperties.getMemberStartValue()));System.out.println("会员ID初始值已设置为:" + idGeneratorProperties.getMemberStartValue());}}/*** 获取下一个会员ID** @return 下一个递增会员ID*/public Long getNextMemberId() {return stringRedisTemplate.opsForValue().increment(MEMBER_ID_KEY);}
}

📌 使用方式

@Autowired
private RedisIdInitializer redisIdInitializer;// 获取下一个会员ID
Long newMemberId = redisIdInitializer.getNextMemberId();
System.out.println("新生成会员ID:" + newMemberId);

📊 总结

优势说明
全局唯一Redis INCR 原子性保障
并发安全多线程/多服务节点同时操作也无冲突
起始值高位避免与已有数据库自增ID冲突
配置化yml配置,随时灵活调整
易扩展支持多业务线ID(如 order:id:generatorcard:id:generator
性能高Redis内存操作,单次耗时微秒级

📦 后续扩展建议

✅ 支持多类型 ID(会员ID、订单ID、卡号ID)
✅ ID带日期前缀(2025043000001)
✅ 超过int最大值时,自动预警 or 换成Bigint


相关文章:

  • Vue3中到达可视区域后执行
  • Tauri v1 与 v2 配置对比
  • C++好用的打印日志类
  • Cangjie Magic在医疗领域的应用:智能体技术如何重塑医疗数字化
  • 科研 | 光子技术为人工智能注入新动力
  • Fiori学习专题二十五:Remote OData Service
  • 数据库设计理论:从需求分析到实现的全流程解析
  • 详解具身智能机器人开源数据集:RoboMIND
  • 潇洒郎: 100% 成功搭建Docker私有镜像仓库并管理、删除镜像
  • 偏移成像中,原始地震采集数据的数据规则化(Data Regularization)
  • Java进阶--设计模式
  • 【LeetCode Hot100】二叉树篇
  • MySQL 中 redo log、undo log 以及 bin log 的区别
  • 安全企业内部im,BeeWorks即时通讯
  • 智能 + 安全:婴幼儿托育管理实训基地标准化建设方案
  • 傅里叶与相位偏移
  • 【Java函数式编程-58.1】深入理解Java中的Consumer函数式接口
  • 基于Spring Boot + Vue 项目中引入deepseek方法
  • 基于RFID与云边端协同的智慧牧场解决方案架构设计
  • 信号完整性简介第二篇
  • AI把野史当信史?警惕公共认知的滑坡
  • 购车补贴、“谷子”消费、特色产品,这些活动亮相五五购物节
  • 王毅谈金砖国家开展斡旋调解的经验和独特优势
  • 李铁案二审驳回上诉,维持一审有期徒刑20年的判决
  • 南部战区位南海海域进行例行巡航
  • 中国建设银行浙江省分行原党委书记、行长高强接受审查调查