多个redis节点生成分布式id问题

来源:13-9 【分布式ID生成方案四】使用redis自增方案实现分布式ID

慕hwj

2023-12-09

该节课中讲解多个redis节点提供生成id的方案有些不明白的地方 :

  1. 对于同一个key,比如 test,使用redis集群时,比如课中说的2个redis节点,该key只会存到一个redis节点中,并不会出现在不同的redis节点上生成重复的id的问题吧 ?

  2. 课中说的在不同的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生成。

0
2
Er十七
回复
慕hwj
😃😃😃
2023-12-16
共2条回复

Java主流分布式解决方案多场景设计与实战

本课程是一门关于分布式系统下常见的解决方案的课程

178 学习 · 49 问题

查看课程