问答 / 5 / 8 / 创建于 3年前
现在有一个产品列表,它使用ajax进行数据10个10个的加载。
第一时间想到的是inRandomOrder()。但是不能用,原因是因为当ajax加载第二页的时候会出现产品重复的情况,经过搜索得知通过使用orderByRaw(“RAND({$seed})”),当$seed指定为一个固定的值后,数据库会先随机排个序,然后再取出。这样就满足了我的需求,但是这种性能太低,数据量不大的情况下就得花费很长的时间。
redis 缓存 id ,然后获取随机 id 组,再根据 id 查询
后面的加载次数少的话,可以把已拉取的数据id过滤掉再随机后面的。次数多就不好来了
缓存你的数据到redis集合 然后随机取
@Su @esacpe 请问一下,随机取应该怎么实现呢?看了下文档,redis使用集合或者列表好像不支持打乱顺序
可以了解一下 随机种子(Random Seed),通俗的解释就是生成一个种子,由这个种子来控制数据顺序,种子是固定的,种子不变,数据顺序就不变。
mysql.rjweb.org/doc.php/random 这篇文章,基本能满足你的需求。ID连续和不连续,UUID等都有
原因是因为当 ajax 加载第二页的时候会出现产品重复的情况
把这一次查出来的id存起来,下一请求的时候排除掉上一次请求的,这样不就行了吗?
其他花里胡哨的纯属给自己增加工作量 :smile:
我要举报该,理由是:
redis 缓存 id ,然后获取随机 id 组,再根据 id 查询