redis的有序集合zset类似于Java的SoretedSet和HashMap的结合体,一方面它是一个set,可以保证内部value的唯一性,另一方面它可以给每个value赋予一个score,代表这个score的排序权重。
zset可以用来存储学生的成绩,value值是学生的ID,score是学生的考试成绩,可以通过对成绩按分数进行排名得到学生名词。还可以用来存储粉丝列表,value值是粉丝的用户ID,score是关注时间,可以对粉丝列表按关注时间进行排序。
public function rankingList()
{
//连接redis
$redis = new Redis();
$redis->connect('127.0.0.1', '6379');
//查询数据
$data = Money::select()->toArray();
// dd($data);
//数组处理 累加佣金
// $newArr = array();
// foreach ($data as $v)
// {
// if (array_key_exists($v['tid'],$newArr))
// {
// $newArr[$v['tid']]['money'] += $v['money'];
// }
// else {
// $newArr[$v['tid']] = $v;
// }
// }
// dd($newArr);
// 添加到redis有序集合
foreach ($data as $v)
{
$redis->zincrby('tag1',$v['money'],$v['tid']);
}
$data = $redis->zrevrange('tag1', 0, -1);
$ids = implode(',', $data);
// $score = $redis->zRevRange('tag1', 0, -1, true);
//判断数据时间排行
if(!empty($time))
{
$data = Money::whereTime('add_time',$time)->whereIn('tid', $ids)->order(Db::raw("FIELD(tid,$ids)"))->select()->toArray();
}else{
$data = Money::whereIn('tid', $ids)->order(Db::raw("FIELD(tid,$ids)"))->select()->toArray();
}
dd($data);
}