redis-pub-發布--sub-訂閱 - php關於redis訂閱的疑問

來源:互聯網
上載者:User
關鍵字 php redis redis-pub-發布--sub-訂閱
一.最近在研究redis的pub/sub(發布訂閱功能),使用phpredis提供的介面來操作資料。
目前疑問:
1.怎麼設定,能夠解決redis subscribe的timeout限制?
redis.conf配置裡的 timeout為0
我的redis版本:

Redis server v=3.0.4 sha=00000000:0 malloc=libc bits=64 build=ee774adfcab9032f

我的php版本:

PHP 5.5.30 (cli) (built: Oct  3 2015 23:46:56) Copyright (c) 1997-2015 The PHP GroupZend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies    with Xdebug v2.3.3, Copyright (c) 2002-2015, by Derick Rethans

1.1在網上找到的答案,有說設定php.ini的:

 default_socket_time = -1 

但是我這測試不成功,直接就報:

redis server went away

1.2目前是參考的這個連結,加上了這個配置:

$redis->setOption(Redis::OPT_READ_TIMEOUT, -1);

本地測試是一直在串連狀態。
2.訂閱端怎麼保證一直運行(keep running),來做到即時訂閱到訊息?

是不是只要redis的sub沒有逾時,這個php指令碼就會一直運行下去呢?

3.有的文章裡說redis的subscribe是阻塞模式,有的說不是,到底是不是呢,阻塞模式是個什麼概念?

我目前的指令碼如下,本地測試是在一直啟動並執行,但是不知道到線上後會不會有什麼問題。

二.訂閱功能的指令碼為subscribe.php

//subscribe.php function f($redis, $chan, $msg) {    switch($chan) {        case 'chan-1':            print "get $msg from $chan\n";            break;        case 'chan-2':            print "get $msg FROM $chan\n";            break;        case 'chan-3':            break;    }} ini_set('default_socket_timeout', -1); $redis = new Redis();$redis->pconnect('127.0.0.1',6379);$redis->setOption(Redis::OPT_READ_TIMEOUT, -1);$redis->subscribe(array('chan-1', 'chan-2', 'chan-3'), 'f');print "\n";

三.執行指令碼:

php subscribe.php求高人指點!

回複內容:

一.最近在研究redis的pub/sub(發布訂閱功能),使用phpredis提供的介面來操作資料。
目前疑問:
1.怎麼設定,能夠解決redis subscribe的timeout限制?
redis.conf配置裡的 timeout為0
我的redis版本:

Redis server v=3.0.4 sha=00000000:0 malloc=libc bits=64 build=ee774adfcab9032f

我的php版本:

PHP 5.5.30 (cli) (built: Oct  3 2015 23:46:56) Copyright (c) 1997-2015 The PHP GroupZend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies    with Xdebug v2.3.3, Copyright (c) 2002-2015, by Derick Rethans

1.1在網上找到的答案,有說設定php.ini的:

 default_socket_time = -1 

但是我這測試不成功,直接就報:

redis server went away

1.2目前是參考的這個連結,加上了這個配置:

$redis->setOption(Redis::OPT_READ_TIMEOUT, -1);

本地測試是一直在串連狀態。
2.訂閱端怎麼保證一直運行(keep running),來做到即時訂閱到訊息?

是不是只要redis的sub沒有逾時,這個php指令碼就會一直運行下去呢?

3.有的文章裡說redis的subscribe是阻塞模式,有的說不是,到底是不是呢,阻塞模式是個什麼概念?

我目前的指令碼如下,本地測試是在一直啟動並執行,但是不知道到線上後會不會有什麼問題。

二.訂閱功能的指令碼為subscribe.php

//subscribe.php function f($redis, $chan, $msg) {    switch($chan) {        case 'chan-1':            print "get $msg from $chan\n";            break;        case 'chan-2':            print "get $msg FROM $chan\n";            break;        case 'chan-3':            break;    }} ini_set('default_socket_timeout', -1); $redis = new Redis();$redis->pconnect('127.0.0.1',6379);$redis->setOption(Redis::OPT_READ_TIMEOUT, -1);$redis->subscribe(array('chan-1', 'chan-2', 'chan-3'), 'f');print "\n";

三.執行指令碼:

php subscribe.php求高人指點!
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.