电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

詳解PHP解決守護進程Redis假死

瀏覽:25日期:2022-09-07 08:15:24
目錄一、一個簡單的守護進程示例二、一個不再假死(偽活)的 Redis 常駐進程示例一、一個簡單的守護進程示例

<?php$redis = new Redis();$redis->connect(’localhost’, 6379);$redis->auth(’xxxxx’); // Redis 密碼如果沒有設置為空字符串。$redis->select(1);$queueKey = ’redis_queue_services_key’; // 業務數據隊列。$queueIngKey = ’redis_queue_services_ing_key’; // 處理中的隊列。try { while (true) {$element = $redis->bRPopLPush($queueKey, $queueIngKey, 60);if ($element) { $data = json_decode($element, true); /** * ...... 此處省略業務邏輯 ...... * */} else { usleep(100000); // 睡眠 0.1 秒。} }} catch (Exception $e) { exit('Error:{$e->getMessage()}');}

這段代碼我們很容易看懂。

它就是通過Redis的阻塞方法bRPopLPush循環從 Redis 隊列中取出數據并處理。如果沒有取到數據就休眠一秒。之所以休眠是為了保證 CPU 能得到充分的利用。因為,我們已經使用了阻塞方法阻塞 60 秒。所以,這個位置休眠與否并不重要。

當我們的業務出現任何錯誤,我們通過try catch進行異常捕獲然后將錯誤信息直接輸出并退當前腳本。

博主寒冰第一次編寫常駐后臺運行的守護進程時,就是如上這種方式寫的代碼。結果,這段代碼運行到 30s 的時候報錯了。提示我們 socket 流超時。于是我在這個腳本頭部加了如下代碼:

ini_set(’default_socket_timeout’, -1);

這樣我們的PHP就不會主動段掉我們與 Redis 的 socket 連接了。

但是,好景不長。過了一段時間,大概半個月吧。運維同學告訴我 Redis 隊列的數據出現了未消費的情況。然后,我查看了消費日志。的確沒有產生新的消費日志。因為我有一個習慣,每個消費消費的時候都會把成功消費的日志寫到文件中。消費失敗的也寫入日志文件中。這樣,我就知道失敗的具體原因。

但是,這次我真的沒有發現有任何的錯誤發生。

常駐后臺進程處理存活狀態。并沒有變成孤兒進程。 常駐后臺進程內存也沒有出現泄漏。 系統 CPU/內存 資源都處理正在狀態。 系統打開的句柄資源也是低消狀態。 帶寬也處理低消狀態。 其它常駐進程也處理正常消費的工作狀態。也就排除了 Redis 故障的問題。

我當時也懷疑過是不是像MySQL一樣常時間連接不進行任何操作,服務器端會主動斷開連接。但是,MySQL 服務器端主動段掉連接會提示:MySQL server has gone away的錯誤。但是,我們的 Redis 服務器端沒有給我們報任何錯誤信息呀。

我們公司用的是阿里云的 Redis 產品。我懷疑是不是 Redis 版本太低造成的這個隱性 BUG。于是,我們將阿里云的 Redis 服務升級到了阿里云支持的最新版本。

結果還是失敗了。我們的 Redis 還是假死了。或者說我們的 Redis 處于偽活狀態。

你認為 Redis 活著,其實它早已經死了。你認為 Redis 死了,但是它卻沒有死亡的特征。

最后,我冷靜下來。

我假定此時的 Redis 已經死了。只是沒有告訴客戶端而已。那么我只需要每次檢測一下 Redis 連接是否存活就好了。

于是,我翻看了 Redis 的 API。發現它提供了一個ping()的方法來檢測連接是否存活。

二、一個不再假死(偽活)的 Redis 常駐進程示例

<?php$redis = new Redis();$redis->connect(’localhost’, 6379);$redis->auth(’xxxxx’); // Redis 密碼如果沒有設置為空字符串。$redis->select(1);$queueKey = ’redis_queue_services_key’; // 業務數據隊列。$queueIngKey = ’redis_queue_services_ing_key’; // 處理中的隊列。try { while (true) {$element = $redis->bRPopLPush($queueKey, $queueIngKey, 60);if ($element) { $data = json_decode($element, true); /** * ...... 此處省略業務邏輯 ...... * */} else { $pong = $redis->ping(); if ($pong != ’+PONG’) {throw new Exception(’Redis ping failure!’, 500); } usleep(100000); // 睡眠 0.1 秒。} }} catch (Exception $e) { exit('Error:{$e->getMessage()}');}

通過代碼對比,我們在第一版代碼的基礎上加了如下代碼:

$pong = $redis->ping();if ($pong != ’+PONG’) { throw new Exception(’Redis ping failure!’, 500);}

我們向 Redis 服務器發送ping的時候,服務器會返回+PONG字符串。當然,這個是 Redis 擴展封裝過的方法。真正的 ping 是不會有 + 號的。

當我們每次 ping 的時候,Redis 服務器就會認為我們的 Redis 客戶端連接處于存活狀態。就不會斷掉我們的連接了。

把代碼進行改造之后,假死頭痛的問題再也沒出現了。

以上就是詳解PHP解決守護進程Redis假死的詳細內容,更多關于PHP解決守護進程Redis假死的資料請關注好吧啦網其它相關文章!

標簽: PHP
相關文章:
主站蜘蛛池模板: 低浓度恒温恒湿称量系统,强光光照培养箱-上海三腾仪器有限公司 | 聚天冬氨酸,亚氨基二琥珀酸四钠,PASP,IDS - 远联化工 | VI设计-LOGO设计公司-品牌设计公司-包装设计公司-导视设计-杭州易象设计 | 喷码机,激光喷码打码机,鸡蛋打码机,手持打码机,自动喷码机,一物一码防伪溯源-恒欣瑞达有限公司 | ERP企业管理系统永久免费版_在线ERP系统_OA办公_云版软件官网 | 印刷人才网 印刷、包装、造纸,中国80%的印刷企业人才招聘选印刷人才网! | Boden齿轮油泵-ketai齿轮泵-yuken油研-无锡新立液压有限公司 | 胃口福饺子加盟官网_新鲜现包饺子云吞加盟 - 【胃口福唯一官网】 | 高空重型升降平台_高空液压举升平台_高空作业平台_移动式升降机-河南华鹰机械设备有限公司 | 太原装修公司_山西整装家装设计_太原室内装潢软装_肖邦家居 | Magnescale探规,Magnescale磁栅尺,Magnescale传感器,Magnescale测厚仪,Mitutoyo光栅尺,笔式位移传感器-苏州连达精密量仪有限公司 | 迪威娱乐|迪威娱乐客服|18183620002 | 橡胶接头|可曲挠橡胶接头|橡胶软接头安装使用教程-上海松夏官方网站 | 湖南自考_湖南自学考试 | 磁力抛光机_磁力研磨机_磁力去毛刺机_精密五金零件抛光设备厂家-冠古科技 | KBX-220倾斜开关|KBW-220P/L跑偏开关|拉绳开关|DHJY-I隔爆打滑开关|溜槽堵塞开关|欠速开关|声光报警器-山东卓信有限公司 | 地磅-电子地磅维修-电子吊秤-汽车衡-无人值守系统-公路治超-鹰牌衡器 | 生态板-实木生态板-生态板厂家-源木原作生态板品牌-深圳市方舟木业有限公司 | 天津市能谱科技有限公司-专业的红外光谱仪_红外测油仪_紫外测油仪_红外制样附件_傅里叶红外光谱技术生产服务厂商 | 深圳市索富通实业有限公司-可燃气体报警器 | 可燃气体探测器 | 气体检测仪 | 重庆轻质隔墙板-重庆安吉升科技有限公司| 微信聊天记录恢复_手机短信删除怎么恢复_通讯录恢复软件下载-快易数据恢复 | 矿用履带式平板车|探水钻机|气动架柱式钻机|架柱式液压回转钻机|履带式钻机-启睿探水钻机厂家 | 岩棉切条机厂家_玻璃棉裁条机_水泥基保温板设备-廊坊鹏恒机械 | 行业分析:提及郑州火车站附近真有 特殊按摩 ?2025实地踩坑指南 新手如何避坑不踩雷 | 橡胶接头_橡胶软接头_套管伸缩器_管道伸缩器厂家-巩义市远大供水材料有限公司 | 金蝶帐无忧|云代账软件|智能财税软件|会计代账公司专用软件 | 天津货架厂_穿梭车货架_重型仓储货架_阁楼货架定制-天津钢力仓储货架生产厂家_天津钢力智能仓储装备 | 南京PVC快速门厂家南京快速卷帘门_南京pvc快速门_世界500强企业国内供应商_南京美高门业 | 砂石生产线_石料生产线设备_制砂生产线设备价格_生产厂家-河南中誉鼎力智能装备有限公司 | 衬四氟_衬氟储罐_四氟储罐-无锡市氟瑞特防腐科技有限公司 | 电动垃圾车,垃圾清运车-江苏速利达机车有限公司 | 美侍宠物-专注宠物狗及宠物猫训练|喂养|医疗|繁育|品种|价格 | 全温度恒温培养摇床-大容量-立式-远红外二氧化碳培养箱|南荣百科 | 磁棒电感生产厂家-电感器厂家-电感定制-贴片功率电感供应商-棒形电感生产厂家-苏州谷景电子有限公司 | 广州迈驰新GMP兽药包装机首页_药品包装机_中药散剂包装机 | 塑料脸盆批发,塑料盆生产厂家,临沂塑料广告盆,临沂家用塑料盆-临沂市永顺塑业 | 滚塑PE壳体-PE塑料浮球-警示PE浮筒-宁波君益塑业有限公司 | 自清洗过滤器,浅层砂过滤器,叠片过滤器厂家-新乡市宇清净化 | 武汉高低温试验箱_恒温恒湿试验箱厂家-武汉蓝锐环境科技有限公司 | 安平县鑫川金属丝网制品有限公司,防风抑尘网,单峰防风抑尘,不锈钢防风抑尘网,铝板防风抑尘网,镀铝锌防风抑尘网 |