php 连接redis 使用 pconnect 的问题

我使用workerman 的 多线程连接redis。

起初几分钟正常

后面的数据就完蛋了

'2017-06-09 23:50:41'
'2017-06-09 23:50:36'
'*8'
'2017-06-09 23:50:46'
'693502000071560'
'2017-06-09 23:50:46'
'2017-06-09 23:50:46'
'*8'
'2017-06-09 23:50:46'
'*8'
'2017-06-09 23:50:46'
'*8'
'2017-06-09 23:50:46'
'*8'PHP Fatal error:  Uncaught exception 'RedisException' with message 'protocol error, got 's' as reply type byte
' in /home/wwwroot/Cron/cron/Task/mapRedisCache.php:105
Stack trace:
#0 /home/wwwroot/Cron/cron/Task/mapRedisCache.php(105): Redis->get('MAP_SYSTEM_DATA')
#1 /home/wwwroot/Cron/test.php(24): Cron\Task\mapRedisCache->getRunningTime()
#2 [internal function]: {closure}()
#3 /home/wwwroot/Cron/vendor/workerman/workerman/Events/React/StreamSelectLoop.php(54): call_user_func_array(Object(Closure), Array)
#4 [internal function]: Workerman\Events\React\StreamSelectLoop->Workerman\Events\React\{closure}(Object(React\EventLoop\Timer\Timer))
#5 /home/wwwroot/Cron/vendor/react/event-loop/src/Timer/Timers.php(90): call_user_func(Object(Closure), Object(React\EventLoop\Timer\Timer))
#6 /home/wwwroot/Cron/vendor/react/event-loop/src/StreamSelectLoop.php(177): React\EventLoop\Timer\Timers->tick()
#7 /home/wwwroot/Cron/vendor/workerman/workerman/Events/React/StreamSelectLoop.php(104): React\EventLoop\StreamSelectLoop->run()
#8 /home/w in /home/wwwroot/Cron/cron/Task/mapRedisCache.php on line 105

'2017-06-09 23:50:46'
'693502000071560'
'693502000071560'
'2017-06-09 23:50:51'
'2017-06-09 23:50:51'worker[Write_Data:20799] exit with status 65280
worker[Write_Data:20798] exit with status 65280

彻底的数据乱套了, redis 存的是 2017.... 读出来 一会+0K 一会 *8 一会其他数据

阅读 7.1k
4 个回答
新手上路,请多包涵

我也遇到此问题,咨询 Workerman 作者,立即得到回复,问题得到解决。解决办法也很简单。
出现此问题的情况一般是在 Workerman::runAll() 调用之前,连接了 Redis,导致 fork 出来的所有子进程都能收到 Redis 返回的数据,所以收到这些“意外数据”导致不是我们想要的结果。

我后面其实是已经解决了

至少要做到每个线程一个redis的持久化连接,而不是主线程去初始化

你看下你是不是连接到mysql了

新手上路,请多包涵

我也是,楼主解决了吗?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题