thinkphp redis用法,thinkphp redis隊列處理_教你用ThinkPHP中thinkphpqueue

 2023-10-24 阅读 26 评论 0

摘要:php中文網最新課程每日17點準時技術干貨分享thinkphp redis用法,最近小編收到群里面的小伙伴在使用ThinkPHP5.0的框架時,不知道如何使用php-queue(實在尷尬,網上很多這方面的教程)。哈哈,不想參考也沒關系,小編就具體地走一遍吧~~關于什么是隊列
53c8461e07d64b16dfe2b2fb20dd79eb.png

php中文網最新課程

每日17點準時技術干貨分享

c2e3a1e5e24099fc9edd06b71e152754.png

thinkphp redis用法,957157d27a72b37ddcc94713fd84e068.png

最近小編收到群里面的小伙伴在使用ThinkPHP5.0的框架時,不知道如何使用php-queue(實在尷尬,網上很多這方面的教程)。哈哈,不想參考也沒關系,小編就具體地走一遍吧~~關于什么是隊列?隊列的解決什么?隊列有哪些場景?...等等這些問題,開發者請自行先去了解,還有本案例只針對ThinkPHP框架進行具體操作哦。1、安裝 thinkphp-queue推薦使用Composer進行安裝,切換到項目的根目錄,執行:?composer require topthink/think-queue2、配置消息隊列的存儲環境配置文件位于 application\extra\queue.php,如圖:5b65abbbdede600979352887cb419c88.png使用Redis驅動,如果Redis環境還沒有安裝,請自行安裝哦,很簡單的,或者也可以使用其他類型驅動,如圖:80ea2ae6aca3b841620d028c4eab4813.png3、任務的創建我們在index模塊下,Index.php文件,建立一個名為 queue 的方法(一定要這樣么?當然不是,本教程,只是例子,你可以新建模塊,方法名也可以是其他),如圖:d52ac06ee4717bbae858a971a116a43d.png3a7c582aa57eb75a0c346a58ae199586.png4、任務消息的消費以及刪除處理我們在 index模塊下創建一個 job 文件,該文件用來處理消費模式,如圖:646304f7350c48ac9e3a23c60c07c7c3.png在 Demo 這個類下,創建一個 fire 方法,該方法是消息隊列默認調用的方法。如圖:a1196369a008c8d045a6f37e9e342457.png以上就是完成任務的創建--》推送--》消費了。
在瀏覽器或者終端,執行一下我們 index/queue.html 方法,就完成創建以及推送了,關于任務消費,可以參考一下命令,在終端切換到項目的根目錄:5、監聽任務并執行
php?think?queue:listenphp?think?queue:work?–daemon(不加–daemon為執行單個任務)

兩種,具體的可選參數可以輸入命令加 –help 查看

可配合supervisor使用,保證進程常駐

1.1 命令模式

  • redis有序隊列。queue:subscribe 命令?[截至2017-02-15,作者暫未實現該模式,略過]

  • queue:work 命令

  • work 命令:該命令將啟動一個 work 進程來處理消息隊列。

php think queue:work --queue helloJobQueue
  • redis是什么?queue:listen 命令

listen 命令:該命令將會創建一個 listen 父進程 ,然后由父進程通過?proc_open(‘php think queue:work’)?的方式來創建一個work 子 進程來處理消息隊列,且限制該work進程的執行時間。

php?think?queue:listen?--queue?helloJobQueue

2.2 命令行參數

  • Work 模式

php?think?queue:work?\--daemon????????????//是否循環執行,如果不加該參數,則該命令處理完下一個消息就退出--queue??helloJobQueue??//要處理的隊列的名稱--delay??0?\????????//如果本次任務執行拋出異常且任務未被刪除時,設置其下次執行前延遲多少秒,默認為0--force??\??????????//系統處于維護狀態時是否仍然處理任務,并未找到相關說明--memory?128?\??????//該進程允許使用的內存上限,以?M?為單位--sleep??3?\????????//如果隊列中無任務,則sleep多少秒后重新檢查(work+daemon模式)或者退出(listen或非daemon模式)--tries??2??????????//如果任務已經超過嘗試次數上限,則觸發‘任務嘗試次數超限’事件,默認為0
  • redis定長隊列,Listen 模式

php?think?queue:listen?\--queue??helloJobQueue?\???//監聽的隊列的名稱--delay??0?\?????????//如果本次任務執行拋出異常且任務未被刪除時,設置其下次執行前延遲多少秒,默認為0--memory?128?\???????//該進程允許使用的內存上限,以?M?為單位--sleep??3?\?????????//如果隊列中無任務,則多長時間后重新檢查,daemon模式下有效--tries??0?\?????????//如果任務已經超過重發次數上限,則進入失敗處理邏輯,默認為0--timeout?60?????????//創建的work子進程的允許執行的最長時間,以秒為單位
  • 可以看到 listen 模式下,不包含?--deamon?參數,原因下面會說明

Linux啟動守護進程,以tp5為例子

nohup?php?think?queue:work?--daemon?--queue?任務名稱?&nohup?php?think?queue:work?--daemon?--queue?任務名稱?&

在Linux查看任務數量,可以在終端輸入:jobs -l

0c1e17e91534ebd4d1c9144271552af1.png

0599aaf811e9b06a09cd2da42365b5ef.png

9a9eeeca753d74270dd2a3029723ec7f.png

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/163826.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息