欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > SpringBoot+Redis全局唯一ID生成器

SpringBoot+Redis全局唯一ID生成器

2025/5/8 1:35:02 来源:https://blog.csdn.net/weixin_45724648/article/details/147632825  浏览:    关键词: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


版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词