spring-starter-redis-id-gen.../README.md
2026-01-12 14:52:48 +08:00

206 lines
5.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Redis ID 生成器
## 工程介绍
Redis ID 生成器是一个基于 Spring Boot Starter 的组件,用于生成基于 Redis 的自增 ID。它的核心功能是
- 提供 `generateId(String key)` 方法,用于生成自增 ID
- 支持为不同的业务场景设置不同的 ID 计数器
- 支持配置 ID 初始值
- 基于 Redis 的 INCR 命令实现,保证 ID 的唯一性和单调性
## 技术栈
- Kotlin 1.9.25
- Spring Boot 3.5.9
- Jedis 5.1.0
- Redis 6.0+
## 构建方法
### 前提条件
- JDK 17+
- Gradle 8.5+
- Redis 6.0+(运行时需要)
### 构建步骤
1. 克隆或下载本工程到本地
2. 进入工程目录:
```bash
cd redis-id-generator
```
3. 执行构建命令:
```bash
./gradlew build --no-daemon
```
4. 构建成功后,会在 `build/libs/` 目录下生成 `redis-id-generator-1.0.0.jar` 文件
## 引用方法
### 方法一:本地 JAR 包引用
1. 将构建生成的 `redis-id-generator-1.0.0.jar` 文件复制到目标工程的 `lib/` 目录(如果没有该目录,需要创建)
2. 在目标工程的 `build.gradle.kts` 文件中添加依赖:
```kotlin
dependencies {
// 其他依赖...
implementation(files("lib/redis-id-generator-1.0.0.jar"))
}
```
### 方法二Maven 仓库引用(未来支持)
未来可以将 JAR 包发布到 Maven 仓库,然后通过坐标引用:
```kotlin
dependencies {
// 其他依赖...
implementation("com.sycn:redis-id-generator:1.0.0")
}
```
## 配置说明
在目标工程的配置文件(如 `application-dev.properties``application-prod.properties`)中添加以下配置:
```properties
# Redis ID生成器配置
# Redis 服务器地址
redis-id-generator.redis.host=localhost
# Redis 服务器端口
redis-id-generator.redis.port=6379
# Redis 密码(如果没有密码,留空)
redis-id-generator.redis.password=
# Redis 数据库索引
redis-id-generator.redis.database=0
# Redis 连接超时时间(毫秒)
redis-id-generator.redis.timeout=3000
# 通用ID计数器的初始值
redis-id-generator.id.initial-value=10000001
# 各ID键的初始值映射可选
# redis-id-generator.id.initial-values.user=20000001
# redis-id-generator.id.initial-values.order=30000001
```
## 使用示例
### 1. 在 Spring Boot 配置类中启用 Redis ID 生成器
```kotlin
package com.example.config
import com.sycn.redisidgenerator.RedisIdGeneratorProperties
import com.sycn.redisidgenerator.RedisIdGeneratorService
import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
@Configuration
@EnableConfigurationProperties(RedisIdGeneratorProperties::class)
class RedisIdGeneratorConfig {
@Bean
fun redisIdGeneratorService(properties: RedisIdGeneratorProperties): RedisIdGeneratorService {
val service = RedisIdGeneratorService(properties)
service.init()
return service
}
}
```
### 2. 在业务代码中使用
```kotlin
package com.example.controller
import com.sycn.redisidgenerator.RedisIdGeneratorService
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
@RestController
@RequestMapping("/api")
class IdController(
private val redisIdGeneratorService: RedisIdGeneratorService
) {
// 生成通用ID
@GetMapping("/id/generate")
fun generateId(): Long {
return redisIdGeneratorService.generateId()
}
// 生成指定业务的ID
@GetMapping("/id/generate/user")
fun generateUserId(): Long {
return redisIdGeneratorService.generateId("user")
}
// 生成订单ID
@GetMapping("/id/generate/order")
fun generateOrderId(): Long {
return redisIdGeneratorService.generateId("order")
}
}
```
## 核心实现原理
1. **连接管理**:使用 Jedis 连接池管理 Redis 连接,确保连接的高效利用
2. **ID 生成**:基于 Redis 的 INCR 命令实现自增,保证 ID 的唯一性和单调性
3. **初始值设置**:使用 Redis 的 SETNX 命令设置初始值,确保初始值只设置一次
4. **多业务支持**:为不同的业务场景使用不同的 Redis 键,实现业务隔离
5. **配置管理**:通过 Spring Boot 的配置属性机制,支持灵活的配置
## 注意事项
1. **Redis 依赖**:本组件运行时依赖 Redis 服务,必须确保 Redis 服务可用
2. **性能考虑**
- ID 生成操作依赖网络 IO性能会受到网络延迟的影响
- 建议在生产环境中部署 Redis 集群,提高可用性和性能
3. **ID 冲突**
- 基于 Redis 的 INCR 命令实现,天然保证 ID 的唯一性
- 不同的业务场景使用不同的键,避免 ID 冲突
4. **初始值设置**
- 初始值一旦设置,后续重启应用不会重置,因为 Redis 会持久化存储
- 如果需要重置初始值,需要手动删除 Redis 中的对应键
## 故障处理
1. **Redis 连接失败**
- 组件在初始化时会尝试连接 Redis如果连接失败会抛出异常应用启动失败
- 确保 Redis 服务正常运行,网络连接畅通
2. **ID 生成失败**
- 检查 Redis 服务是否正常
- 检查网络连接是否畅通
- 检查 Redis 权限是否正确
## 版本历史
### 1.0.0
- 初始版本
- 实现基本的 ID 生成功能
- 支持配置初始值
- 支持多业务场景
## 联系我们
- 作者chenqiang
- 邮箱chenqiang@h024.cn
- 项目地址:[https://github.com/example/redis-id-generator](https://github.com/example/redis-id-generator)