• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Redis 多进程Uncaught exception 'RedisException' with message

php 搞代码 3年前 (2022-01-25) 111次浏览 已收录 0个评论
文章目录[隐藏]

<body>

1.背景描述:用Swoole作为TcpServer,配置了worker_num = 8 ,task_worker_num =8 .也就是会有16个进程。 创建了一个redid连接,在 onTask(8个task,每个task都会回调onTask方法)方法中读取redis保存的值。

2.问题描述:现在发现会报错Uncaught exception ‘RedisException’ with message ‘read error on connection’ 。初步判定是多个进程调用redid导致的,我只用一个task,是没有问题的。
看到swoole的文档:

需要在onWorkerStart中建立redis连接,那么有work 、task 各8个,如果这样的话就会有16个redis连接(task、work启动时都会调用onWorkerStart函数)。

1)需要建立16个redis连接,我这样理解对吗?该如何改进呢?
2)每个redis连接我都要保存吗?这样岂不是用起来有点麻烦。
3)如果我以后work、task的数值增加,岂不会有更多的redis连接,我该怎么办呢?
4)是不是我使用方式有问题,那么我该怎么使用呢?

4本文¥来源gao!%daima.com搞$代*!码$网9

搞代gaodaima码

回复内容:

<body>

1.背景描述:用Swoole作为TcpServer,配置了worker_num = 8 ,task_worker_num =8 .也就是会有16个进程。 创建了一个redid连接,在 onTask(8个task,每个task都会回调onTask方法)方法中读取redis保存的值。

2.问题描述:现在发现会报错Uncaught exception ‘RedisException’ with message ‘read error on connection’ 。初步判定是多个进程调用redid导致的,我只用一个task,是没有问题的。
看到swoole的文档:

需要在onWorkerStart中建立redis连接,那么有work 、task 各8个,如果这样的话就会有16个redis连接(task、work启动时都会调用onWorkerStart函数)。

1)需要建立16个redis连接,我这样理解对吗?该如何改进呢?
2)每个redis连接我都要保存吗?这样岂不是用起来有点麻烦。
3)如果我以后work、task的数值增加,岂不会有更多的redis连接,我该怎么办呢?
4)是不是我使用方式有问题,那么我该怎么使用呢?

对,每个进程都要创建一个连接。如果启动了200个进程就一定需要200个连接。你的使用方式没错。

这样使用确实会创建16个连接。
不想保存连接的话,可以在用到redis时再创建连接,用pconnect方式。
由于不同进程的redis连接不能共享,随着进程数增加是会有更多的redis

可以在worker进程中写主要逻辑。涉及redis操作的部分封装成任务,由task进程执行。在启动task时,使用taskwait方法,等待任务的返回。这样相当于把task进程当成了连接池。

如果还有其他的慢速任务需要用task异步处理,则可以在启动task时,传入指定workerid,这样其实就是把task进程区分功能,有的负责redis数据处理,有的负责慢速任务。

1: redis和mysql机制不一样, 不怕连接多。
2: 没必要用pconnect, swoole本身是长驻内存的,connect之后,除非是worker重启了,连接才失效。
3: read error on connection, 只能你复用了同一个连接,但这个连接可能在其他的进程是被close了。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Redis 多进程Uncaught exception 'RedisException' with message

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址