mysql异步task_EasySwoole高性能task异步任务
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异步任务相关推荐
- mysql 数据库引擎切花_asyncio异步编程【含视频教程】
不知道你是否发现,身边聊异步的人越来越多了,比如:FastAPI.Tornado.Sanic.Django 3.aiohttp等. 听说异步如何如何牛逼?性能如何吊炸天....但他到底是咋回事呢? 本 ...
- Disruptor是一个高性能的异步处理框架
为什么80%的码农都做不了架构师?>>> Disruptor是一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量的JMS),也可以认为是一个观察者模式实现,或者事件- ...
- ZeroMQ简介:一种高性能的异步消息传递库
ZeroMQ(也称为ØMQ,0MQ或ZMQ)是一种高性能的异步消息传递库,旨在用于分布式或并行应用程序中.它提供了一个消息队列,但是与面向消息的中间件不同,ZeroMQ系统可以在没有专用消息代理的情况 ...
- python异步编程视频_asyncio异步编程【含视频教程】
Python Python开发 Python语言 asyncio异步编程[含视频教程] 不知道你是否发现,身边聊异步的人越来越多了,比如:FastAPI.Tornado.Sanic.Django 3. ...
- 浅谈.Net异步编程的前世今生----异步函数篇(完结)
前言 上一篇我们着重讲解了TPL任务并行库,可以看出TPL已经很符合现代API的特性:简洁易用.但它的不足之处在于,使用者难以理解程序的实际执行顺序. 为了解决这些问题,在C# 5.0中,引入了新的语 ...
- 【转】1.6异步编程:IAsyncResult异步编程模型 (APM)
传送门:异步编程系列目录-- 大部分开发人员,在开发多线程应用程序时,都是使用ThreadPool的QueueUserWorkItem方法来发起一次简单的异步操作.然而,这个技术存在许多限制.最大的问 ...
- 同步异步 阻塞 非阻塞 异步调用 线程队列 协程
阻塞 非阻塞 阻塞:程序遇到了IO操作 导致代码无法继续执行 交出了COU执行权 非阻塞:没有IO操作 或者即使遇到IO操作 也不阻塞代码执行 阻塞 就绪 运行指的是应用程序所处的状态写程序时 尽量减 ...
- springboot异步和切面_Spring异步编程 你的@Async就真的异步吗?异步历险奇遇记
引言有点长 前端的宝宝会用ajax,用异步编程到快乐的不行~ 我们java也有异步,用起来比他们还快乐~ 我们biaji一个注(gǒupí)解(gāoyào),也是快乐风男... 且看下面的栗子: 注 ...
- springboot异步和切面_Spring异步编程 | 你的@Async就真的异步吗 ☞ 异步历险奇遇记...
引言有点长 前端的宝宝会用ajax,用异步编程到快乐的不行~ 我们java也有异步,用起来比他们还快乐~ 我们bia~ji~一个注(gǒupí)解(gāoyào),也是快乐风男... 且看下面的栗子: ...
最新文章
- Android之Adapter用法总结
- 计算机硬盘有usb借口吗,为什么移动硬盘不建议插在台式机前置USB接口上
- 算法--库函数实现全排列
- 【POJ3264】Balanced Lineup,线段树入门
- 结构专业规范大全_一级注册结构工程师专业考试所使用的规范、标准、规程
- Java dom4j解析RESTFull风格发布的WebService的xml文件
- ATA接口寄存器描写叙述
- 模块二 会务现场服务策划方案 案例1样本
- 清吧音响怎么选?看看这个黄金搭配,跟着买就对了
- matlab有限单元法计算桁架算例代码
- 4.4 matlab三维曲线(plot3函数、fplot3函数)
- 华为5大设计师讲述HarmonyOS UX设计背后的故事
- Java多线程系列--【JUC锁08】-共享锁和ReentrantReadWriteLock
- 编写一个程序,输入一个句子,然后统计出这个句子当中不同的单词个数。
- win10系统 ProgramData在哪里?怎么找
- 我给文案新人的1点建议!
- 嵌入式linux下3G上网卡移植
- 怎么用html制作满天星,html+js+css 实现满天星
- 智能手表音频特性测试_中学生可以戴99.9元的小米有品-Haylou/嘿喽智能手表上学吗?...
- 中朝生意经,去朝鲜捞一把!