Posted
Filed under 프로그래밍
Redis 는 SUBSCRIBE 대상자 전체에게 PUBLISH 하는 기능이 있다.
메세지를 보관하지 않기때문에 클라이언트가 못받으면 해당 메세지는 다시 받을수 없다.
그래서 RabbitMQ 와는 틀리다.

redis-cli 에서 실행한다면

test 이라는 채널을 구독한다.
SUBSCRIBE test

그러면 메세지를 받을수 있는 대기상태로 전환된다.
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "test"
3) (integer) 1

다른 클라에서 보낸다.
PUBLISH test babo

해당 채널을 구독한 모든 클라는 같은 메세지를 받게 된다.
1) "message"
2) "test"
3) "babo"

복수 구독도 가능하다.
SUBSCRIBE test1 test2 test3

PHP 에서 redis 라이브러리 사용 (Ubuntu 기준)
apt-get install php5-redis

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('localhost',6379);

$redis->subscribe(array('chan-1','chan-2','chan-3'), 'f');
print "\n";
?>


PHP에서 PUBLISH 예제
<?php 
//publish.php 
$redis = new Redis(); 
$redis->pconnect('localhost',6379);
 $redis->publish('chan-1', 'hello, world!'); // send message to channel 1.
 $redis->publish('chan-2', 'hello, world2!'); // send message to channel 2.
 
 print "\n";
 $redis->close();
?>
2015/09/30 17:05 2015/09/30 17:05