1
wy315700 2014-12-23 20:37:13 +08:00
取前几位不就行了
|
4
ooh 2014-12-23 21:05:53 +08:00
如果象上面那样你自己用时间戳写一个函数更方便
|
5
cbsw 2014-12-23 21:06:38 +08:00
UUID 定义就是这么长的,是根据时间和空间唯一确定的一个标识符。LZ 想要的是一定范围内的唯一标识符,这个可以自己用随机数生成,然后通过记录保证唯一性(重复的丢掉)
|
7
mathgl 2014-12-23 21:23:30 +08:00
我现在用 bson 的那个 objectid.
24位,也几乎是一致性。 |
8
9hills 2014-12-23 22:26:23 +08:00 via iPhone
|
10
14 2014-12-23 23:34:40 +08:00 via Android
import shortuuid
|
11
14 2014-12-23 23:37:07 +08:00 via Android
搭车问,现在项目里面有这样一个需求,遇到重复的用户名自动重命名,现在我是直接在后面加四位随机数,貌似到现在没有看到过报错
|
12
kavinyao 2014-12-23 23:56:14 +08:00
得看应用场景。
如果不是分布式系统,维护一个自增序列即可。 如果是在分布式环境,对一致性要求高的话,UUID几乎是唯一选择;反之,如果可以容忍一定程度的重复,一些简单的方案也是可行的。 |
13
geeklian 2014-12-24 00:11:23 +08:00
首先把uuid转换成10进制,然后再转换成某个大于16进制的字符串,这样长度缩短,随机性什么都不变。
转换成10进制使用: int(uuid.uuid1().hex,16) |
14
incompatible 2014-12-24 00:42:11 +08:00
uuid的32个字符保证的是universal unique
实际上你只需要application scope的unique,所以用uuid真的很浪费、不如自己写一个 用数据库实现一个sequence很简单的 如果是高并发系统,可以参考淘宝的订单号生成机制。预先分配一批随取随用,快用完时再分配一批。也不难实现的。 |
15
geew 2014-12-24 10:14:42 +08:00
@14 那是你人品好 之前看到的一个做法是建一张表来记录重命名的用户名信息 类似这样
name seq seq记录这个名字的使用次数 反正新的名字的时候取seq+1就行 |
16
9hills 2014-12-24 10:23:32 +08:00
|
18
wy315700 2014-12-24 10:35:15 +08:00
@9hills
http://pastie.org/pastes/8619409# 看这么多不如写个程序跑跑看重复性。 然后是否随机可以用rngtest 参考树莓派的测试方法 http://www.oschina.net/translate/well-that-was-unexpected-the-raspberry-pis-hardware-random-number-generator |
21
qbeenslee 2014-12-24 13:01:31 +08:00
|
22
lixm 2014-12-24 13:14:50 +08:00
base64.urlsafe_b64encode(uuid.uuid4().bytes)[:-2] 可以压缩为22位
|