通过生成一个单调递增的队列,通过redis或者jdbc生成一个区间,每次获取号码时本地进行生成,区间号码用完后生成并跳到新的区间。重启项目,也会跳到下个区间,预防重复。
注意:不适用分布式环境
- 配置
bootx.common.sequence: # 队列区间存储类型 store_type: redis # 使用redis情况下redisKey前缀 key_prefix: 'Sequence:' # 步长,每次增加的步数 step: 1 # 区间步长 range_step: 1000 # 区间起始位置 range_start: 0
- 使用
public class TestController { private final Sequence sequence; @Operation(summary = "序列生成器") @GetMapping("/sequence") public ResResult<Void> sequence(){ // 通过传入业务键获取long 类型的号码, long l = sequence.next("cs"); // 获取string String s = sequence.nextValue("cs"); return Res.ok(); } }
Sequence序列号生成器接口DefaultRangeSequence序列号区间生成器接口默认实现SeqRangeManager区间管理器接口RedisSeqRangeManagerredis区间管理器实现JdbcSeqRangeManagerjdbc数据库方式区间管理器实现SeqRange序列号区间对象模型