修改redis zset的score为64位整形以支持雪花ID算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了修改redis zset的score为64位整形以支持雪花ID算法相关的知识,希望对你有一定的参考价值。

参考技术A 关于雪花ID算法的介绍有很多文章,就不画蛇添足了,当然雪花ID算法也有一个问题是时间回拨的问题,这个可以参考以下两个链接去了解:
https://github.com/baidu/uid-generator
https://zhuanlan.zhihu.com/p/77737855
但是我们把这个64位的ID保存到redis的zset的时候,却面临一个zset的score溢出问题,原因是score是64位double类型(float64),关于这个问题有开发人员提出过解决办法,详见: https://blog.csdn.net/Nassue_sn/article/details/109011883 和 https://cloud.tencent.com/developer/article/1525534 .
他们解决办法的相同点就是把雪花ID变成52位(float64的整数位精度是52位)以期不会溢出,但是这也势必导致ID的范围变小,比如他们的业务就是保存15天的消息,这样的修改并不是一个满足复杂业务场景的实现,20年和21年断断续续修改redis server的源码将score的类型从float64改为int64位,并且同步修改php redis和go redis的client接口实现,因用于公司新兴业务,未经公司同意尚未能公开源码,实际上也不难修改啊

以上是关于修改redis zset的score为64位整形以支持雪花ID算法的主要内容,如果未能解决你的问题,请参考以下文章

Redis的有序集合操作命令

Redis 1.6zset

系统学习redis之七——redis数据类型之zset数据类型及操作

(3)Redis zset原理

每天一个知识点:Redis Zset 原理

Redis有序集合数据类型操作命令