我正在使用uuid.uuid4().hex
生成随机唯一键,我想将其用作key
来重置密码。
有一个场景,多个用户尝试请求更改密码,因为IntegrityError
正在复制,我正在考虑key
。
我非常不情愿地知道uuid.uuid4().hex
生成一个重复的密钥,但在这个场景中,对请求的竞争条件,它们的关键是重复。
我已经想到了几种方法,但我想知道哪种方式更好。
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
found = True
while found:
key = uuid.uuid4().hex
found = ResetPassword.objects.filter(key=key).count()
然后使用此键添加新条目。
其他可能性有哪些? 感谢。
答案 0 :(得分:0)
如果我在你的位置,我会在使用它之前重新生成一些10K或20K的键。将它们存储在redis中。
这样您的程序将得到优化。