gpt4 book ai didi

mysql - 如何在不检查数据库中是否存在的情况下生成 8 个字符的唯一字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:20:07 25 4
gpt4 key购买 nike

我想每天生成100万个二维码。每个二维码都应该有随机唯一值。为了实现唯一性,我有如下两个选项

1)第一个选项是生成 8 个字符的字母数字随机字符串并检查它是否存在于数据库中。如果不存在则存储在数据库中,如果存在则重试获取。

这种方法的问题是生成 100 万个唯一的字母数字字符串大约需要 45 分钟,因为我们必须每次检查生成的字母数字字符串是否存在于数据库中。

2) 第二个选项是通过附加 6 个字符的字母数字字符串和时间(小时+分钟+秒+日期+月+年)来生成唯一 token 。使用此选项,我能够在 5 分钟内生成 100 万个唯一的字母数字字符串。

我正在使用第二个选项,但此选项的问题是由此生成的字母数字字符串长度为 15 个字符。我想生成只有 8 个字符长的字母数字字符串。如果我使用第二个选项,那么时间戳本身需要 8 个字符,并且字符串很容易被猜到。

我想知道如何在不检查数据库中是否存在的情况下生成 8 个字符的随机且唯一的字母数字字符串。

最佳答案

使用set结构就够了

def random_str(n):
base = 'abcefghijklmnopqrstuvwxzy0123456789'
return ''.join([base[ord(i) % len(base)] for i in os.urandom(n)])

s = set()
SIZE = 1000000
while len(s) < SIZE:
s.add(random_str(5))

而且,它大约需要 5 秒。

对不起,我每天都在思念。将8个字符拆分为拖尾部分:第一部分(3个字符)表示每天或其他条件,可以将其存储在Mysql中并在生成一次或使用1970年以来的天数之前查询并将其更改为基于36的数字。秒部分 5 个字符使用上面的代码生成唯一键。

关于mysql - 如何在不检查数据库中是否存在的情况下生成 8 个字符的唯一字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35193730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com