Redis 多進程Uncaught exception 'RedisException' with message

來源:互聯網
上載者:User
關鍵字 php redis swoole

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)是不是我使用方式有問題,那麼我該怎麼使用呢?

回複內容:

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了。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.