实现原理:
Redis中的RedisAtomicLong 具备原子性, 可以通过其incr方法进行递增.
实现方法:
Redis Incr 命令将 key 中储存的数字值增一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
实际业务中,假设key被清除或者value值被清零,都需要 重新初始化value值为清零前的value值,或者初始化为大于清零前的value值,以保证生成的ID是单调递增的。
具体实现:
一、设计数据库表:
二、实现逻辑:
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));