데이터베이스/Redis
[Redis] Publish/Subscribe
Plan__B
2018. 9. 6. 21:59
Redis는 다양한 데이터 타입을 지원하면서, publish/subscribe(pub/sub)
모델까지 지원합니다. pub/sub는 메시지 큐와는 특성이 조금 다른데, pub/sub 모델에서는 채널을 subscribe한 모든 subscriber에게 메시지를 전달하기 때문에, 별도로 메시지를 보관하지 않는다는 것입니다. 아래는 Redis를 통해 pub/sub 모델을 사용하기 위한 커맨드들입니다.
- subscribe [channel ...] : 전달된 channel들을 subscribe합니다.
- unsubscribe [channel ...] : 전달된 channel들을 unsubscribe합니다. 아무 채널도 전달되지 않으면, subscribe되어 있던 모든 채널을 unsubscribe합니다.
- publish [channel] [message] : 전달된 channel에 message를 publish합니다.
- psubscribe [pattern ...] : 지정된 pattern들과 일치하는 채널들을 subscribe합니다.
- punsubscribe [pattern ...] : 지정된 pattern들과 일치하는 채널들을 unsubscribe합니다. unsubscribe 명령처럼, 아무 채널도 전달되지 않으면 모든 채널을 unsubscribe합니다.
subscribe [channel ...]
전달된 channel들을 subscribe합니다. subscribe하고 나면, 해당 채널로 브로드캐스팅되는 메시지들을 읽기 위해 Ctrl-C로 인터럽트되기 전까지 무한히 blocking됨과 동시에 메시지 하나가 들어옵니다.
127.0.0.1:6379> subscribe test
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "test"
3) (integer) 1
메시지는 위처럼 3개의 요소들로 구성됩니다.
- 메시지 타입 : subscribe, message, unsubscribe로 나뉘며, 각각 채널을 성공적으로 subscribe한 경우, 채널로 일반 메시지가 publish된 경우, 채널을 성공적으로 unsubscribe한 경우에 해당됩니다.
- 채널 이름 : 메시지가 브로드캐스팅된 채널 이름입니다. 특히 여러 개의 채널을 subscribe한 경우에, 수신된 메시지의 채널을 분별하기 위해 사용합니다.
- 메시지 : 전송된 메시지입니다.
publish [channel] [message]
전달된 channel에 message를 publish합니다.
127.0.0.1:6379> publish test adsf
(integer) 1
127.0.0.1:6379> publish test hello
(integer) 1
성공적으로 publish되면, 1이 반환됩니다. 아래는 위처럼 메시지를 publish한 후, subscriber 측에 수신된 메시지 정보입니다.
1) "message"
2) "test"
3) "Hello"
1) "message"
2) "test"
3) "adsf"