当前位置: 首页 > 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


http://www.xdnf.cn/news/238645.html

相关文章:

  • Redis应用场景实战:穿透/雪崩/击穿解决方案与分布式锁深度剖析
  • 【数据链路层深度解析】从帧结构到协议实现
  • git 怎样把本地仓库推送到新建的远程仓库
  • 详细解释C++ 泛型模板中的完美转发(Perfect Forwarding)
  • 【自定义控件实现最大高度和最大宽度实现】
  • 2025年天梯题解(L1-8 + L2)
  • 普通IT的股票交易成长史--20250430午
  • 湖北理元理律师事务所:从法律视角看债务优化的合规实践
  • 【Android】36原生Settings新框架PreferenceFragment
  • 生物化学笔记:神经生物学概论05 感受野 视觉中枢 高级视皮层中的信息走向
  • 文章记单词 | 第51篇(六级)
  • 代码随想录算法训练营第三十天(补)
  • 【mysql】执行过程,背诵版
  • 2025平航杯—团队赛
  • 企业的呼入语音智能体是什么样子?
  • 启动Hadoop集群及集群效果
  • 企业数字化转型新动向日渐明鲜,当以“AI为中心”而驱动
  • 分治算法求序列中第K小数
  • RAII 示例
  • 2025-03 机器人等级考试四级理论真题 4级
  • Dify添加ollama模型失败:NewConnectionError: Failed to establish a new connection
  • MCP与开源社区的共赢之道:携手推动技术创新
  • GRE隧道
  • Git Stash 详解
  • windows系统常用快捷键(CMD常用命令,DOS常用命令)
  • C++类和对象(中)
  • PostgreSQL中的SSL
  • 设备目录树--个人笔记
  • linux中sigint和sigterm的区别
  • react-11使用vscode开发react相关扩展插件(相关的快捷生成)