实现原理:

Redis中的RedisAtomicLong 具备原子性, 可以通过其incr方法进行递增.

实现方法:

Redis Incr 命令将 key 中储存的数字值增一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
实际业务中,假设key被清除或者value值被清零,都需要 重新初始化value值为清零前的value值,或者初始化为大于清零前的value值,以保证生成的ID是单调递增的。

具体实现:

一、设计数据库表:

image.png

二、实现逻辑:

1、约定参数:
扩容因子:expantionRate = 0.75(默认)
分段容量:parttion = 1000(默认)
value:RedisAtomicLong.incrementAndGet(); //redis自增ID
sequence: DB sequence 序列号字段值

2、扩容机制:
boolean flag == String.valueOf(value).endWith(String.valueOf(expantionRate * parttion));

三、逻辑图: