当前位置:Gxlcms > PHP教程 > redis如何实现数据翻页随机不重复展示

redis如何实现数据翻页随机不重复展示

时间:2021-07-01 10:21:17 帮助过:2人阅读

需求是这样的
用户每翻一页都可以看到随机且不重复浏览的数据
展示数据百万级,用户数10W左右

我起初是想用redis集合来实现
先用集合记录 全部可以展示数据的id
然后用集合记录 每个用户浏览过的数据id

用户每次翻页 SDIFFSTORE 上面两个集合 取差集得出 该用户没有浏览的数据id
然后SRANDMEMBER 随机出一个页的数据id
用数据id查出详细数据

发现性能不给力给放弃了
SRANDMEMBER 随机集合越大而越慢
SDIFFSTORE 得出差集还需要写入。。。

暂时没有思路了,还得求解大神们~~~
先谢了~~

回复内容:

需求是这样的
用户每翻一页都可以看到随机且不重复浏览的数据
展示数据百万级,用户数10W左右

我起初是想用redis集合来实现
先用集合记录 全部可以展示数据的id
然后用集合记录 每个用户浏览过的数据id

用户每次翻页 SDIFFSTORE 上面两个集合 取差集得出 该用户没有浏览的数据id
然后SRANDMEMBER 随机出一个页的数据id
用数据id查出详细数据

发现性能不给力给放弃了
SRANDMEMBER 随机集合越大而越慢
SDIFFSTORE 得出差集还需要写入。。。

暂时没有思路了,还得求解大神们~~~
先谢了~~

这个最好不要使用redis,你可以从Redis中将所有ID获取到,然后保存到Session中,每次通过集合随机获取并删除一批ID,然后将剩余的ID再保存到Session。没有了就再从Redis获取一次。

php 随机 id,存到session里,和redis没多大关系

其实你这部分id可以被cache在一次session中,真的没必要没一起都计算差值,因为你不但需要计算还需要Redis本身的开销.
在session中,两个array,一个保存全部,一个保存已经用过的,每一次分配的时候,从
array_diff中随机id.

人气教程排行