基于Redis实现分布式ID生成器主要使用了自增长 counters 特性。
具体实现方法:
1、 首先准备一个 id:count key ,count 初始化为一个初始值,例如 0
2、 每次获取一个ID时:
- 使用INCRBY命令将count值加1
- 获取这个更新后的count值,作为本次生成的ID
- 并设置count的过期时间,为下次获取ID预留空间
具体命令为:
INCRBY id:count 1 # 将count+1
ID = GET id:count # 获取ID
EXPIRE id:count 60 # 设置1分钟过期
3、 设置过期时间是为了:
- 防止ID被它人提前获取
- 防止ID被重复利用
4、 多台服务器部署时,需要分片ID:
- count的初始值为 机器ID * 段大小
- 这样每个服务器生成的ID段不重合
5、 配置Cluster集群可以使得ID连续:
- 每个Master生成一段ID
- 故障转移时,下一个Master继续生成
举例:
- 设置ID段大小为10000
- 两台服务器,ID:
10.1.1.1:count # 初始化为 0 * 10000 = 0
10.1.1.2:count # 初始化为 1 * 10000 = 10000
- 这样可以防止ID重复,也分配了不连续的ID段。
综上,通过给Redis计数器设置过期时间和分片,可以方便实现分布式ID生成器。并提供了一定的连续性和扩展性。