Heim  >  Artikel  >  Backend-Entwicklung  >  redis如何实现数据翻页随机不重复展示

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

WBOY
WBOYOriginal
2016-06-06 20:24:221505Durchsuche

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn