>  기사  >  백엔드 개발  >  redis如何实现数据翻页随机不重复展示

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

WBOY
WBOY원래의
2016-06-06 20:24:221464검색

需求是这样的
用户每翻一页都可以看到随机且不重复浏览的数据
展示数据百万级,用户数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.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.