网站首页 > 博客文章 正文
这次我们利用hyperf的Crontab能力做一个Excel导出功能。基于Hyperf2.0版本进行
场景
Excel导出是我们在日常业务中常用的一种功能,各种数据列表需要在提供查询展示功能的同时,一般也需要带有导出功能,一般在数据量不大的时候直接下载就可以了,但是如果数据量几万、十几万或者更多的时候,容易导致数量大请求超时、内存溢出等问题导致导出失败,解决方案呢有很多种,这里我们使用计划任务的异步形式来做。
这里的限制一方面来自数据库查询的压力,大批量数据查询容易超时内存溢出、第二个方面是Excel生成时会吃掉大量的内存,每个行、每个列都要load到内存中,最后写入到文件,可想这是很可怕的事情。而常规php-fpm下对内存及程序的运行时间都是有限制的。
前提准备
- 安装crontab组件 composer require hyperf/crontab
- 利用注解声明一个计划任务,需要配置属性name任务名称、rule也就是执行时间、callback也就是业务执行逻辑,关于注解我们之前已经学习过了hyperf注解
- 在crontab的callback中编写业务逻辑就可以了
执行逻辑
- 在数据列表中点击下载的时候,通过接口创建一个下载任务 export_task
- 计划任务每分钟执行一次,每次通过task状态去获取待处理的任务
- 处理完成之后将生成的文件路径,更新到task中
- 在下载中心就可以下载了
- 计划任务在hyperf中就是一个自定义的进程
相关演示Demo
启动服务后 php ./bin/hyperf.php start 计划任务进程就会启动
同时我们在web端展示两个列表,一个用户列表,一个导出任务列表。
前端这里使用React结合antDesign库简单完成
前端执行:yarn start 将会启动前端页面
相关事项
如果想运行代码的话需要提前准备一下几点:
- 确认相关表已经创建 php ./bin/hyperf migrate 如果是第一次需要执行 migrate:install 创建migrate表
- 确认composer相关依赖已经安装 执行 composer install
- 确认React相关依赖已经安装 执行 yarn add
- 跨域的解决这里使用hyperf提供的方案
总结
这里只是提供了一种异步的思路,大家可以根据自己的实际业务去构思不同的方案
相关代码:
https://github.com/nobody05/hyperf_study
相关文档:
crontab使用说明:https://hyperf.wiki/2.0/#/zh-cn/crontab
跨域处理:https://hyperf.wiki/2.0/#
/zh-cn/middleware/middleware?id=
%e8%b7%a8%e5%9f%9f%e4%b8%ad%e9%97%b4%e4%bb%b6
ant文档:
https://ant.design/components/table-cn/#
components-table-demo-reset-filter
猜你喜欢
- 2025-03-28 提高 PHP 代码质量的 36 计(php提升)
- 2025-03-28 解决PHP导出CSV文件中文乱码问题(php导出excel文件)
- 2025-03-28 产品经理提需求时要考虑的 15 个隐性需求
- 2025-03-28 网站后台莫名增加N个管理员,记一次SQL注入攻击
- 2025-03-28 如何让Word、Excel文件显示内容的缩略图,而不是图标!
- 2025-03-28 8个可以让你自学成才的网站,质量高且免费,自学改变一生
- 2025-03-28 5个小众又实用的网站,忍不住分享,每个都让你相见恨晚
- 2025-03-28 如何通过PhpSpreadsheet操作Excel文档
- 2025-03-28 mysql怎么导入excel数据?(mysql导入表格数据)
- 2025-03-28 免费分享一份完整的PHPExcel视频教程
你 发表评论:
欢迎- 374℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 369℃用AI Agent治理微服务的复杂性问题|QCon
- 360℃初次使用IntelliJ IDEA新建Maven项目
- 353℃Maven技术方案最全手册(mavena)
- 351℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 349℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 348℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 344℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)