EasySwoole高性能task异步任务

羡仙. • 2019 年 06 月 20 日

和上一篇一样也是遗漏的重要文章,我太聪明了,这都能发现...他们都有共同的特征:笔记里的开头在上一篇...不管是上一篇还是上两篇都是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.php的index()增加播放数统计逻辑...的注释,先用于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异步任务哦~

mysql异步task_EasySwoole高性能task异步任务相关推荐

  1. mysql 数据库引擎切花_asyncio异步编程【含视频教程】

    不知道你是否发现,身边聊异步的人越来越多了,比如:FastAPI.Tornado.Sanic.Django 3.aiohttp等. 听说异步如何如何牛逼?性能如何吊炸天....但他到底是咋回事呢? 本 ...

  2. Disruptor是一个高性能的异步处理框架

    为什么80%的码农都做不了架构师?>>>    Disruptor是一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量的JMS),也可以认为是一个观察者模式实现,或者事件- ...

  3. ZeroMQ简介:一种高性能的异步消息传递库

    ZeroMQ(也称为ØMQ,0MQ或ZMQ)是一种高性能的异步消息传递库,旨在用于分布式或并行应用程序中.它提供了一个消息队列,但是与面向消息的中间件不同,ZeroMQ系统可以在没有专用消息代理的情况 ...

  4. python异步编程视频_asyncio异步编程【含视频教程】

    Python Python开发 Python语言 asyncio异步编程[含视频教程] 不知道你是否发现,身边聊异步的人越来越多了,比如:FastAPI.Tornado.Sanic.Django 3. ...

  5. 浅谈.Net异步编程的前世今生----异步函数篇(完结)

    前言 上一篇我们着重讲解了TPL任务并行库,可以看出TPL已经很符合现代API的特性:简洁易用.但它的不足之处在于,使用者难以理解程序的实际执行顺序. 为了解决这些问题,在C# 5.0中,引入了新的语 ...

  6. 【转】1.6异步编程:IAsyncResult异步编程模型 (APM)

    传送门:异步编程系列目录-- 大部分开发人员,在开发多线程应用程序时,都是使用ThreadPool的QueueUserWorkItem方法来发起一次简单的异步操作.然而,这个技术存在许多限制.最大的问 ...

  7. 同步异步 阻塞 非阻塞 异步调用 线程队列 协程

    阻塞 非阻塞 阻塞:程序遇到了IO操作 导致代码无法继续执行 交出了COU执行权 非阻塞:没有IO操作 或者即使遇到IO操作 也不阻塞代码执行 阻塞 就绪 运行指的是应用程序所处的状态写程序时 尽量减 ...

  8. springboot异步和切面_Spring异步编程 你的@Async就真的异步吗?异步历险奇遇记

    引言有点长 前端的宝宝会用ajax,用异步编程到快乐的不行~ 我们java也有异步,用起来比他们还快乐~ 我们biaji一个注(gǒupí)解(gāoyào),也是快乐风男... 且看下面的栗子: 注 ...

  9. springboot异步和切面_Spring异步编程 | 你的@Async就真的异步吗 ☞ 异步历险奇遇记...

    引言有点长 前端的宝宝会用ajax,用异步编程到快乐的不行~ 我们java也有异步,用起来比他们还快乐~ 我们bia~ji~一个注(gǒupí)解(gāoyào),也是快乐风男... 且看下面的栗子: ...

最新文章

  1. Android之Adapter用法总结
  2. 计算机硬盘有usb借口吗,为什么移动硬盘不建议插在台式机前置USB接口上
  3. 算法--库函数实现全排列
  4. 【POJ3264】Balanced Lineup,线段树入门
  5. 结构专业规范大全_一级注册结构工程师专业考试所使用的规范、标准、规程
  6. Java dom4j解析RESTFull风格发布的WebService的xml文件
  7. ATA接口寄存器描写叙述
  8. 模块二 会务现场服务策划方案 案例1样本
  9. 清吧音响怎么选?看看这个黄金搭配,跟着买就对了
  10. matlab有限单元法计算桁架算例代码
  11. 4.4 matlab三维曲线(plot3函数、fplot3函数)
  12. 华为5大设计师讲述HarmonyOS UX设计背后的故事
  13. Java多线程系列--【JUC锁08】-共享锁和ReentrantReadWriteLock
  14. 编写一个程序,输入一个句子,然后统计出这个句子当中不同的单词个数。
  15. win10系统 ProgramData在哪里?怎么找
  16. 我给文案新人的1点建议!
  17. 嵌入式linux下3G上网卡移植
  18. 怎么用html制作满天星,html+js+css 实现满天星
  19. 智能手表音频特性测试_中学生可以戴99.9元的小米有品-Haylou/嘿喽智能手表上学吗?...
  20. 中朝生意经,去朝鲜捞一把!

热门文章

  1. fsk调制matlab 仿真,基于MATLAB对FSK信号调制与解调的仿真
  2. matlab上的神经网络模型导出成C文件
  3. 剪刀石头布微信小程序源码
  4. PHP获取客户端设备类型,浏览器版本型号,IP地址,具体地理位置信息
  5. 基于javaweb+mysql的在线商城购物商城水果蔬菜批发商城(前台、后台)
  6. 人机交互学习-4 交互设计过程
  7. 学习算法笔记(13)
  8. 水滴公司Q3财报引股价增长,保险业复苏“第一枪”打响了?
  9. 5个超实用视频素材网站,免费下载~
  10. 微信公众号自定义回复(关键词回复:文本消息、图文消息)