如今 我们是如许处置处罚的.
可以利用ZSET有序聚集举行存储. 理论上说一个ZSET中, 10W以内的数目并无任何鸭梨. 也就是说一条微博点赞的人数再10W以内(这是不大概的).
redis>ZADD("t:tid:liked", time(), uid);//tid 为你的微博ID, $uid 为你的点赞人的UID
//取出点赞的人(支持按照点赞时间来排序的哦:))… 按照LSD的说的 HASH取出来的值没有任何序次的.
$uids = redis>ZREVRANGE("t:tid:liked", $offset, $max, TRUE); //倒序取值
$uids = redis>ZRANGE("t:tid:liked", $offset, $max, TRUE); //序次取值
//$offset 和 $max 如许来算
$pagesize = 20;
offset=(page > 1) ? ($page - 1) * $pagesize : 0;
max=(page * $pagesize) - 1;
//一次性取出全部的如许取.
$total = redis>ZCARD("t:tid:liked");
$uids = redis>ZREVANGE("t:tid:liked", 0, $total - 1, TRUE);
//拿到的$uids 是一个array 哦…
//判断一个用户是否点赞了这一来哦
redis>ZSCORE("t:tid:liked", $uid);
//取消赞如许来
redis>ZREM("t:tid:liked", $uid);
//批量取消某短时间内的点赞如许操纵
redis>ZREMRANGEBYSCORE("t:tid:liked", $start_timestamp, $end_timestamp);
//诸云云类的操纵, 要比HASH强许多.
恩再PS一下!!!
假如必要用到NOSQL如许的数据库来存储雷同微博的数据的话, 可以如许存储:).
$pipe = $redis->MULTI(Redis::PIPELINE);
pipe>SET("t:tid", json_encode($data)) //json这种格式存储貌似有点废物. 假如能想到更好的格式的话,不要用JSON, 由于JSON太大了… 比如MSGPACK这个个是就比JSON要好许多
->ZADD(“t:scores”, time(), $tid);
$pipe->EXEC();
//PIPE 如许的操纵赞爆了. 假如你的REDIS支持事故的话, PIPE就不是一个原子性的操纵了
//取出数据的话就很好取出了!!
$tid = $reids->ZREVRANGE(“t:scores”, 0, 100);
$pipe = redis>MULTI(Redis::PIPELINE);foreach(tid as $key=> $value){
pipe>GET("t:value");
}
$list = $pipe->EXEC();
//$list就是你的数据啦
再再PS一下, 微博品评也是雷同的存储方法. 只是必要约定$Redis KEYS的名称. 比如:
c:<品评ID> 怎么和微博数据关联起来可以如许: t:$tid:comments:scores (ZSET timestmap 品评ID);
如许取数据的时间就用PIPELINE方便许多了.
末了啰嗦一句, NOSQL这种数据库的 KEY 肯定要设置好. ShopWT(www.shopwt.com)是国内知名商城系统及商城网站建设提供商,其中销客多小程序系统为商家提供小程序商城开发、小程序分销系统、微分销系统、商城系统、电商网站建设、微信分销系统、小程序商城等多端商城及电子商务行业解决方案> 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |