首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
在4.4.X版本中自定义进程的redis长链接。在4.5版本和以上如果过度或着替代?
### 问题描述 在4.4.23版本中自定义进程。里面可以使用redis的长链接。进行监听数据库key值过期。但在4.5和以上像这种长链接是因为携程的切换自动断链接还是我的使用方法错误。这个我以前就发现这个问题,就一直没有升级swoole版本  ### Swoole版本,PHP版本,以及操作系统版本信息 swoole 4.8.0 php 7.4.21 macos 12.0.1 ### 相关代码 ```php public function run(Process $process): void { ini_set('default_socket_timeout', 99999999); ini_set('set_time_limit', 0); Template::init(); $redis = new \redis(); $redis->pconnect($this->host, $this->port, 0, null, 0); $redis->config('SET', 'notify-keyspace-events', 'Ex'); $redis->select($this->select); $data = $redis->zRangeByScore('keyEvent', 0, time(), ['withscores' => TRUE]); $coRedis = new \Swoole\Coroutine\Redis(); $coRedis->connect($this->host, $this->port, 0); $coRedis->select($this->select); // $data=Redis::zRangeByScore('keyEvent',"-inf","".time(),['withscores'=> TRUE]); foreach ($data as $k => $v) { $strArr = explode(":", $k); if (count($strArr) < 3) { continue; } list($database, $table, $id) = $strArr; if (method_exists($this, $database)) { // $this->$database($table, $id, $strArr,false); } } $redis->subscribe(['__keyevent@9__:expired'], function ($redis, $chan, $msg) use ($coRedis) { $strArr = explode(":", $msg); if (count($strArr) == 3) { list($database, $table, $id) = $strArr; if (method_exists($this, $database)) { $bool = $this->$database($table, $id, $msg); if ($bool) { $coRedis->zRem('keyEvent', $msg); } } } }); } ``` ### 你期待的结果是什么?实际看到的错误信息又是什么?
发布于4年前 · 16 次浏览 · 来自
提问
石窝
### 问题描述 在4.4.23版本中自定义进程。里面可以使用redis的长链接。进行监听数据库key值过期。但在4.5和以上像这种长链接是因为携程的切换自动断链接还是我的使用方法错误。这个我以前就发现这个问题,就一直没有升级swoole版本  ### Swoole版本,PHP版本,以及操作系统版本信息 swoole 4.8.0 php 7.4.21 macos 12.0.1 ### 相关代码 ```php public function run(Process $process): void { ini_set('default_socket_timeout', 99999999); ini_set('set_time_limit', 0); Template::init(); $redis = new \redis(); $redis->pconnect($this->host, $this->port, 0, null, 0); $redis->config('SET', 'notify-keyspace-events', 'Ex'); $redis->select($this->select); $data = $redis->zRangeByScore('keyEvent', 0, time(), ['withscores' => TRUE]); $coRedis = new \Swoole\Coroutine\Redis(); $coRedis->connect($this->host, $this->port, 0); $coRedis->select($this->select); // $data=Redis::zRangeByScore('keyEvent',"-inf","".time(),['withscores'=> TRUE]); foreach ($data as $k => $v) { $strArr = explode(":", $k); if (count($strArr) < 3) { continue; } list($database, $table, $id) = $strArr; if (method_exists($this, $database)) { // $this->$database($table, $id, $strArr,false); } } $redis->subscribe(['__keyevent@9__:expired'], function ($redis, $chan, $msg) use ($coRedis) { $strArr = explode(":", $msg); if (count($strArr) == 3) { list($database, $table, $id) = $strArr; if (method_exists($this, $database)) { $bool = $this->$database($table, $id, $msg); if ($bool) { $coRedis->zRem('keyEvent', $msg); } } } }); } ``` ### 你期待的结果是什么?实际看到的错误信息又是什么?
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2021-10-29
Rango
需要捕获一下 redis 异常,发现连接断开后重新连接 redis-server
赞
0
回复
2021-11-11
石窝
回复
Rango
韩神!如果用新代码案例!那么会出现进程重新拉起的情况。如果用老代码的话!不那么方便。您看下个swoole版本会不会改善这个情况
赞
0
回复