如何实现按随机进行排序?

现在有一个产品列表,它使用 ajax 进行数据 10 个 10 个的加载。

有一个需求就是每次打开列表时候,数据是随机进行展示的。#

第一时间想到的是 inRandomOrder ()。但是不能用,原因是因为当 ajax 加载第二页的时候会出现产品重复的情况,经过搜索得知通过使用 orderByRaw (“RAND ({$seed})”),当 $seed 指定为一个固定的值后,数据库会先随机排个序,然后再取出。这样就满足了我的需求,但是这种性能太低,数据量不大的情况下就得花费很长的时间。

请问下大家有没有合适的解决方案?#

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

redis 缓存 id , 然后获取随机 id 组,再根据 id 查询

3年前 评论
讨论数量: 8

后面的加载次数少的话,可以把已拉取的数据 id 过滤掉再随机后面的。次数多就不好来了

3年前 评论

redis 缓存 id , 然后获取随机 id 组,再根据 id 查询

3年前 评论

缓存你的数据到 redis 集合 然后随机取

3年前 评论

@Su @esacpe 请问一下,随机取应该怎么实现呢?看了下文档,redis 使用集合或者列表好像不支持打乱顺序

3年前 评论
Su 3年前

可以了解一下 随机种子(Random Seed)
通俗的解释就是生成一个种子,由这个种子来控制数据顺序,种子是固定的,种子不变,数据顺序就不变。

3年前 评论

mysql.rjweb.org/doc.php/random 这篇文章,基本能满足你的需求。ID 连续和不连续,UUID 等都有

3年前 评论

原因是因为当 ajax 加载第二页的时候会出现产品重复的情况

把这一次查出来的 id 存起来,下一请求的时候排除掉上一次请求的,这样不就行了吗?

其他花里胡哨的纯属给自己增加工作量 :smile:

3年前 评论