來源:互聯網
上載者: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求高人指點!