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

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

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

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

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

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

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

1个月前 评论
讨论数量: 8

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

1个月前 评论

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

1个月前 评论

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

1个月前 评论

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

1个月前 评论
Su 1个月前

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

1个月前 评论

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

1个月前 评论

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

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

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

1个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!