基于redis实现点赞数,点击数,排行榜

使用场景

对于某些视频或者文章有点赞数和点击数, 通过这些数据就可以进行排行榜的功能了

使用异步队列 + redis的集合

A.php

//点击数
$redis->zIncrBy('click'.':'.date('Ymd'),1,$videoId);
//点赞数
$redis->zIncrBy('love'.':'.$videoId,1,$$user);
//获取当前video的播放数或者点赞数
$redis->zScore($key,$videoId);

B.php 计算日榜周榜月榜

//点击数日榜
$key = 'click:'.date('Ymd');
$redis->zRangeByScore($key);
//点击数周榜


Redis.php

<?php
namespace App\Lib\Redis;
class Redis
{
    public $redis;
    public function __construct()
    {
        $this->redis = \EasySwoole\Pool\Manager::getInstance()->get('redis')->getObj();
    }

    /**
     * @param $key
     * @param $score
     * @param $member
     * @return bool
     * 有序集合
     */
    public function zInCrBy($key,$score,$member)
    {
        if(empty($key) || empty($score) || empty($member)){
            return false;
        }
       return $this->redis->zInCrBy($key,$score,$member);
    }


    public function zRank($key,$member)
    {
        if(empty($key) || empty($member)){
            return false;
        }
        return $this->redis->zRank($key,$member);
    }
    /**
     * @param $key
     * @param $member
     * @return bool
     * 获取指定键成员的分数
     */
    public function zScore($key,$member)
    {
        if(empty($key) || empty($member)){
            return false;
        }
        return $this->redis->zScore($key,$member);
    }

    /**
     * @param $key
     * @return bool
     * 返回有序集中指定区间内的成员,递减
     */
    public function zRevRange($key)
    {
        if(empty($key)){
            return false;
        }
        return $this->redis->zRevRange($key,0,-1,true);
    }

    /**
     * @param $key
     * @return bool
     * 返回有序集中指定区间内的成员,递增
     */
    public function zRange($key)
    {
        if(empty($key)){
            return false;
        }
        return $this->redis->zRange($key,0,-1,true);
    }

    /**
     * @param $key
     * @return bool
     * 返回有序集中指定区间内的成员,通过索引,分数从高到低
     */
    public function zRevRangeByScore($key)
    {
        if(empty($key)){
            return false;
        }
        return $this->redis->zRevRangeByScore($key,'+inf','-inf',['withScores' => true, 'limit' => array(0, 100)]);
    }

    public function __call($name, $arguments)
    {
        // TODO: Implement __call() method.
        return $this->redis->$name(...$arguments);
    }
}

测试

日榜

增加数据
在这里插入图片描述
查询当日分数1-10之间的数据,排序
在这里插入图片描述

周榜

增加数据
在这里插入图片描述
三天的数据得到三个集合的并集
在这里插入图片描述
得到排行
在这里插入图片描述
WEIGHTS 可以设置每个集合的权重,意为在原来集合分数乘权重得到输出集合的值。
两个集合并集时,如果有相同的key,则可以通过 SUM|MIN|MAX 进行控制。默认为SUM

月榜 略

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值