多个redis节点生成分布式id问题
来源:13-9 【分布式ID生成方案四】使用redis自增方案实现分布式ID

慕hwj
2023-12-09
该节课中讲解多个redis节点提供生成id的方案有些不明白的地方 :
-
对于同一个key,比如 test,使用redis集群时,比如课中说的2个redis节点,该key只会存到一个redis节点中,并不会出现在不同的redis节点上生成重复的id的问题吧 ?
-
课中说的在不同的redis节点上使用不同的起始值和步长可以避免id的重复,但是这种策略里,生成的id能保证唯一,但不是趋势递增的吧 ?
节点1生成id : 1,3,5,…
节点2生成id : 2,4,6,…
如果是我理解不对,麻烦再详细讲解一下,谢谢
1回答
-
Er十七
2023-12-09
同学,你好。这个问题提的很好。
1、第一个问题,如果是单在一个redis集群中的话,同一个key会分布到一个节点上,每次incr只会得到递增的值,但是课程中讲解的是两个redis集群,课程中有提过一句,在图中没有给大家着重的画出来。给大家造成了一些误解。当是两个redis集群的时候,从不同集群中获取到的incr后的id就有可能会重复了。2、第二个问题,确实如同学所说的一样,如果是从两个redis集群通过不同的初始值和步长的方式避免了id的重复,但是分布式id服务从这两个redis集群获取到的id是非递增的。
这时候呢就需要数据库存储的时候配合分库分表规则来实现,我们想一下,数据库自增id + 步长的实现方案是两个数据库表通过自增id,利用步长的方式实现id唯一,在两个数据库表中存储的id分别是1,3,5;2,4,6。那同理到使用redis这种步长的实现方案,我们也可以采用分库分表规则,id % 2的方式,让单一数据库表中的id是递增的。
3、针对于redis 步长这种实现方案呢,上述虽然实现了分布式id的唯一与递增,但是实现起来相对复杂且需要多种方案的配合使用,不够灵活,大家可以把这种实现思路作为扩展即可。在具体实现的时候,其实单一redis集群足以应对单业务的id生成。022023-12-16
相似问题