首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django:在竞争条件下使用UUID4复制唯一ID

Django:在竞争条件下使用UUID4复制唯一ID
EN

Stack Overflow用户
提问于 2015-04-17 07:35:14
回答 1查看 889关注 0票数 0

我正在使用uuid.uuid4().hex来生成随机唯一的密钥,我想使用它作为一个key来重置密码。

有一个场景,多个用户试图请求更改密码,我正在体验IntegrityError,因为key正在复制。

我知道这是非常不喜欢的,uuid.uuid4().hex基因的复制键,但在这个场景,一个种族宽容的请求,他们的关键是被复制。

我已经想出了几种方法,但我不知道哪一种更好。

试/除

代码语言:javascript
复制
saved = false
while not saved:
    key = uuid.uuid4().hex
    try:
        reset_password_object.key = key
        reset_password_object.save()
        saved = True
    except IntegrityError:
       key = uuid.uuid4().hex    

基于模型的滤波器

发现=真

代码语言:javascript
复制
while found:
    key  = uuid.uuid4().hex
    found = ResetPassword.objects.filter(key=key).count()

然后使用这个键添加一个新条目。

还有什么其他的可能性呢?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-04-17 10:18:12

如果我在你的位置,我会再生一些10K或20K键在使用之前。会把它们储存在红葡萄酒里。

  1. 在10K或20K左右创建唯一的UUID
  2. 将它们存储在redis键中,并在每次需要时使用LPOP。
  3. 当您已经使用了所有的10K或20K UUID重新生成,通过cron或某种机制。

这样你的程序就会优化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29693053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档