生成 16 位长度的数字+字母编码组合,如果不使用保存 mysql 时设置 unique,怎么在生成的过程中确保唯一呢?

2020-02-25 17:04:13 +08:00
 kayseen
3448 次点击
所在节点    Python
20 条回复
kayseen
2020-02-25 17:06:48 +08:00
比如年前的支付宝的福卡,每张卡都有一个大概 8 位长度的编码,且保证编码唯一,组合的可能性肯定超过需要的数量,但是对于重复性的处理是咋搞的啊
shintendo
2020-02-25 17:08:19 +08:00
参考 uuid 原理
Varobjs
2020-02-25 17:27:26 +08:00
13 位时间戳,map 映射定义好的字母表,➕几个随机字母数字
lxml
2020-02-25 17:30:21 +08:00
mini 版 雪花算法啊
janxin
2020-02-25 17:31:22 +08:00
搜索关键词“分布式 唯一 ID”
littlewing
2020-02-25 17:32:59 +08:00
分布式唯一 ID 生成器
loginbygoogle
2020-02-25 18:39:28 +08:00
多此一举
mostkia
2020-02-25 19:14:08 +08:00
我生成唯一 id 的算法是一般都是 MD5 (时间戳+盐)
虽然依旧有极小概率会出现重复,但我感觉我的一生里应该不会碰到一次,所以没必要太过纠结
formatex
2020-02-25 21:27:19 +08:00
不要求随机性的话这样:
0000
0001
....
aaaa
aaab
aaac
hihipp
2020-02-25 23:28:42 +08:00
时间戳 + 用户标识,用 16 位 MD5 摘要算法。
cmdOptionKana
2020-02-26 00:11:17 +08:00
RedisMasterNode
2020-02-26 00:30:13 +08:00
xuanbg
2020-02-26 07:19:45 +08:00
@mostkia
@hihipp 你们这个不行啊,同一毫秒有两个请求咋办呀?

如果不能通过算法保证唯一性,那就只能通过查表保证唯一性了。。。
melkor
2020-02-26 08:38:56 +08:00
@xuanbg 时间戳加序列号加随机数,碰撞概率足够低即可。真的遇上碰撞就重试。先查表没用,并发问题一样有。
BlackBerry999
2020-02-26 09:41:29 +08:00
雪花算法生成 ID 靠谱一点
vevlins
2020-02-26 09:56:28 +08:00
自荐一下文章:分布式唯一 ID https://juejin.im/post/5e43b22251882549361e4be4,不过如果单表就是脱裤子放屁了,设置 unique + 随便一个随机算法成本最小。
ps1aniuge
2020-02-26 13:41:06 +08:00
使用 [使用保存 mysql 时设置 unique]即可呀。设置 unique + 随便一个随机算法成本最小。
楼上正解。
zunceng
2020-02-26 13:45:36 +08:00
snowflake + base58
mostkia
2020-02-26 15:05:08 +08:00
@xuanbg 没看到有盐嘛,单纯时间戳自然不太可靠的。加点佐料啊,哈哈
xpdoh
2020-02-28 16:53:18 +08:00
base36,时间戳 x7//2020 年起约 120 年,间隔 50 毫秒,随机码 x9//约 10^15 种可能,共 16 位

这是我的方案,又短又不会冲突,能用 120 年,就是这么自信

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

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

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

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

© 2021 V2EX