和上一篇一样也是遗漏的重要文章,我太聪明了,这都能发现...他们都有共同的特征:笔记里的开头在上一篇...不管是上一篇还是上两篇都是ElasticSearch除了EasySwoole的缩写一样都是ES别的我还真没发现出什么不同.其实这上一篇是获取视屏Id的一个小功能.我这里就不对他做文章的编写了.我笔记里有,没必要分享出来.菜鸟都会的东西
  我们每请求一次就相当于用户播放了一次视频.对于视频播放的次数应该进行统计.通过对视频播放次数可以进行热度的排行,其他的也能做统计.只不过是我的业务用到了这个视频,就拿视频举例了.
  通过mysql设置一个字段进行.如paly_num当然字段设置随你哈.当每次用户请求的时候就让这个字段+1.也可以借助Redis来做.但是如果当平台访问用户量多的时候,如果单纯用Mysql的话会 出现一些性能问题. 我通过task异步任务+redis有序集合来替代Mysql方案(mysql方案我就没做,替换一次用的很好.假装自己做了).

TaskDemo

  在vendor\easyswoole\easyswoole\src\Swoole\Task\TaskManager.php中是EasySwoole为我们封装好的Task.直接使用就可以了.
  首先了解下Swoole中的Task.如果下面演示看不明白建议去官网/百度了解一下.
App\HttpController\Api\Video.phpindex()增加播放数统计逻辑...的注释,先用于task测试

use EasySwoole\EasySwoole\Swoole\Task\TaskManager;
public function index()
{
    $id = intval($this->params['id']);
    if (empty($id)) {
        return $this->writeJson(Status::CODE_BAD_REQUEST, '请求不合法');
    }
    try {
        $video = (new VideoModel())->getById($id);
    } catch (\Exception $e) {
        return $this->writeJson(Status::CODE_BAD_REQUEST, '请求不合法');
    }
    if (!$video || $video['status'] != \Yaconf::get('video_status.status')) {
        return $this->writeJson(Status::CODE_BAD_REQUEST, '请求视频不存在');
    }
    $video['video_duration'] = gmstrftime('%H:%M:%S', $video['video_duration']);
    // 播放数统计
    TaskManager::async(function(){
        sleep(8);
        echo 'hello QvBiLam' . PHP_EOL;
    });
    return $this->writeJson(Status::CODE_OK, 'ok', $video);
}

  按照PHP正常执行顺序的话.应该是先等待8s然后输出hello QvBiLam.最后再返回数据.但是我们来看下我制作的超短小视频.本来是生成GIF的...结果是178.3mb,一打开电脑都卡的不行....什么奇葩,图片178.3mb视频2.4mb...图和视频都不贴了!

Redis

  接下来是Redis有序集合.如果下面演示看不明白建议去官网/百度了解一下.现在redis.ini增加视频播放量的key.

# Yaconf配置文件.我的Yaconf相关文章中有介绍.
video_play_num_key='video_play_num'

  通过ZINCRBY key increment member 有序集合中对指定成员的分数加上增量 increment

// 播放数统计
TaskManager::async(function () use ($id) {
    Di::getInstance()->get('REDIS')->zincrby(\Yaconf::get('redis.video_play_num_key'), 1, $id);
});

  多次不同请求测试

127.0.0.1:6379> zrange video_play_num 0 -1
1) "20"
2) "18"
3) "19"

  当我们输入zrange的时候发现有四个参数.我们来试一下

127.0.0.1:6379> zrange video_play_num 0 -1 WITHSCORES
1) "20"
2) "1"
3) "18"
4) "4"
5) "19"
6) "4"

  显示分数.可以试一下倒叙.分数从高到低显示

127.0.0.1:6379> zrevrange video_play_num 0 -1
1) "19"
2) "18"
3) "20"
127.0.0.1:6379> zrevrange video_play_num 0 -1 WITHSCORES
1) "19"
2) "6"
3) "18"
4) "5"
5) "20"
6) "1"

这就完啦~怎么统计就自己玩去吧.我在这主要介绍的是task异步任务哦~
41.jpg

Last modification:February 18th, 2020 at 10:24 pm