不太推荐LS用HASH来存储点赞的数据. 因为没办法进行排序(如果需要的话. 我想一定需要)
目前 我们是这样处理的.
可以使用ZSET有序集合进行存储. 理论上说一个ZSET中, 10W以内的数量并无任何鸭梨. 也就是说一条微博点赞的人数再10W以内(这是不可能的).
= = = 20;$offset = ($page > 1) ? ($page – 1) * $pagesize : 0;$max = ($page * $pagesize) – 1;("t:$tid:liked");$uids = $redis->ZREVANGE("t:$tid:liked", 0, $total – 1, TRUE);("t:$tid:liked", $uid);("t:$tid:liked", $uid);("t:$tid:liked", $start_timestamp, $end_timestamp);//诸如此类的操作, 要比HASH强很多.
恩再PS一下!!!
如果需要用到NOSQL这样的数据库来存储类似微博的数据的话, 可以这样存储:).
$pipe = $redis->MULTI(Redis::PIPELINE);("t:scores", time(), $tid);$pipe->EXEC();= $reids->ZREVRANGE("t:scores", 0, 100);$pipe = $redis->MULTI(Redis::PIPELINE); => $value){$pipe->GET("t:$value");}$list = $pipe->EXEC();//$list就是你的数据啦
再再PS一下, 微博评论也是类似的存储方法. 只是需要约定$redis KEYS的名称. 比如:c:<评论ID> 怎么和微博数据关联起来可以这样:
t:$tid:comments:scores (ZSET timestmap 评论ID);
这样取数据的时候就用PIPELINE方便很多了.
最后啰嗦一句, NOSQL这种数据库的 KEY 一定要设置好.
,害怕攀登高峰的人,永远在山下徘徊。