Redis在分布式ID中的原理是什么?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
Redis为单线程的,所以操作为原子操作,利用 incrby命令可以生成唯一的递增ID。
单机单点,吞吐不够,加集群
假设N个节点,则步长为N,节点起始值为1,2,…… N。则三个节点生成的ID一定不同!想想为什么?以上信息条件可以转化为数学推理:
1+x*N=2+y*N且x、y、N都为整成数且N不为1,试问等式存不存在?
答:假设存在在起始值是1的节点上叠加x次之后等于起始值为2、叠加y次的值,
既 “1 + x * N = 2 + y * N”
等式成立则:
x * N = 1 + y * N
x * N - y * N = 1
(x - y) * N = 1
(x - y) = 1 / N
又因为 x、y都为整成数;
所以x - y 必为整成数;
又因为只有N等于1的时候,1/N才为整成数;
与条件N为1不符合,所以不存在。
同理可证 1+xN=3+yN和 2+xN=3+yN也是如此。