每次从我的数据库中获得10个随机id



我一次需要10个随机id。每次我要求新的ID集时,我都需要获得一组新的随机ID,但新的ID不能包括我以前多次要求新ID集时已经获得的任何ID,除非重新设置过程。我的数据库中可能总共有100或100万个ID。我计划使用id在网页上显示10个项目,包括下一个和上一个按钮。如果用户返回到任何先前显示的页面,则已经显示的页面必须与显示的原始项目一致

我有一个想法,我选择种子为1000次的随机数字,将其存储在redis服务器上,并在用户进入页面时每10行弹出一次。有什么不同的想法吗?

对于一大组不重复的"随机"数,您可能最好使用加密。如果数字不重复,那么它们就不是真正的随机,因为它们被限制为不重复。每次你选择一个号码,可用号码的数量就会减少。因此,输出并不是真正随机的。

若要实现,请设置计数器:0、1、2、3。。。选择一个常量键。然后使用密钥加密计数器以获得非重复输出。然后递增计数器,准备生成下一个输出。因为加密是可逆的,所以使用相同密钥的不同输入可以保证给出不同的输出。加密是一个一对一的过程。

AES将为您提供128个非重复位,DES仅为64位。如果128位还不够,那么你将不得不对更大的块密码进行一些研究,比如Rijndael。

您正在寻找一种可重复的随机排序。在MySQL中,您可以通过向数学函数rand()传递种子来实现这一点,如文档中所述:

对于相等的参数值,RAND(N)每次返回相同的值,从而生成列值的可重复序列。

这将为您提供前10条记录:

select t.*
from mytable t
order by rand(12345)
limit 10

然后可以进行繁殖;以获得";下一个";10条记录,您使用相同的种子来rand(),而offset的结果是:

select t.*
from mytable t
order by rand(12345)
limit 10 offset 10

最新更新