有大佬用过 Python 版本的雪花算法生成 id 吗?我在网上找到的版本,随机生成产生重复的概率太大了

2020-04-02 17:21:57 +08:00
 kayseen

如题, 在网上找到的代码链接

https://blog.csdn.net/weixin_39767528/article/details/82595841

4710 次点击
所在节点    Python
21 条回复
kayseen
2020-04-02 17:25:30 +08:00
我是单机使用, 如果两个用户在同一毫秒申请这个编码,因为依赖时间的关系是一定会重复吗?
aec4d
2020-04-02 17:33:06 +08:00
都懒得看 CSDN 就知道怎么回事儿。理解原理才行,是不可能重复的,除非是多线程,多进程或者分布式环境,这种情况并发高一定会有重复。可以搞一个中心化发号器杜绝重复
MinQ
2020-04-02 17:35:32 +08:00
@kayseen 是的,多线程的话可能会导致 count 出现脏读脏写,建议给 count 加锁
MinQ
2020-04-02 17:36:30 +08:00
@aec4d 单机用加个锁拉倒了吧?
banxi1988
2020-04-02 17:40:06 +08:00
推荐一个视频 ,对 snowflake 算法有说明. Python 实现的.
https://www.bilibili.com/video/BV1TJ411D7Cw/
lhx2008
2020-04-02 17:59:13 +08:00
这玩意肯定是在 pip 或者 github 上面找个多人用的库
gclm
2020-04-02 19:03:37 +08:00
时钟回拨。确实会重复,可以其他算法生成 ID
superrichman
2020-04-02 19:13:28 +08:00
可以考虑用 redis 的 incr 来生成 id
keshawnvan
2020-04-02 19:21:13 +08:00
你可以参考一下我的实现,有解决时钟回拨
https://www.yuque.com/kaixiang-jinoo/gtspek/mft5gx
kayseen
2020-04-02 21:39:43 +08:00
@keshawnvan 刚看了下你写的几篇文章真太好了,可惜看不懂 JAVA😔。。。
kayseen
2020-04-02 21:41:10 +08:00
@superrichman
谢谢提供思路,之前有考虑过,觉得雪花算法不依赖数据库挺好的哈哈
kayseen
2020-04-02 21:41:26 +08:00
@aec4d
嗯嗯,谢谢回复
kayseen
2020-04-02 21:42:28 +08:00
@banxi1988
十分感谢!这个视频讲的确实很不错,学习了!
kayseen
2020-04-02 21:43:26 +08:00
@lhx2008
唉,说起来你可能不信,我在 github 上没有找到 python 版本用的人多的
kayseen
2020-04-02 21:44:08 +08:00
@gclm
找了好久都是推荐雪花算法,请问还有其他什么方案生成啊?
keshawnvan
2020-04-03 10:52:13 +08:00
@kayseen 看懂原理自己实现以下就可以了
TransAM
2020-04-03 14:03:11 +08:00
不加锁也可以,每个线程维护自己的计数器,机器 id 后面插入 tid 。
cz5424
2020-04-04 19:40:48 +08:00
上线至今没遇到重复的
kayseen
2020-04-07 19:53:11 +08:00
@cz5424
请问你用的版本是哪个啊, 在网上找到版本重复概率好高===
rogwan
2020-04-08 07:42:36 +08:00
可以考虑下 short uuid

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/658735

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX