[Redis] Publish/Subscribe
- Redis
- 2020. 8. 20.
이번 글에서는 redis의 message broker 기능인 publish/subscribe에 대해 알아보겠습니다.
0. Message Broker
kafka/RabbitMQ와 같은 message system에서 제공하는 message broker의 기능을 redis도 자체적으로 제공해줍니다.
아래 그림과 같이 Client-1이 ch1에 "Hello"라는 메세지를 publish하면 ch1을 구독하고 있던 Client-2는 "Hello"라는 메세지를 전달받게 됩니다.
만약 특정 메세지의 발행전에 해당 채널을 구독하고 있던 subscriber가 없다면, 해당 메세지는 사라지게됩니다.
아래 그림으로 살펴보면 client-1이 "World"라는 메세지를 발행했을 당시에는 ch2를 구독하고 있는 subscriber가 없었습니다.
따라서 해당 메시지는 전달받은 subscriber가 없습니다.
이후에 Client-2가 ch2를 구독한다고 하더라도 구독전에 publish된 메시지는 전달받을 수 없습니다.
😅 중요!!
Redis는 message의 완벽한 전달을 보장하지 않습니다.
따라서 메세지의 손실이 일어나서는 안되는 시스템에서는 Redis를 사용하면 안됩니다...
1. Publish / Subscribe
redis-cli를 사용해 message를 publish하고 subscribe 해보겠습니다. 실습을 위해 2개의 redis client가 필요합니다.
먼저 메시지를 publish할 redis client에서 Hello라는 메세지를 ch1로 publish 해보겠습니다.
아래의 명령어를 입력하면, 결과값으로 0을 반환합니다.
이때의 결과값은 방금 publish한 메세지를 받은 subscriber의 숫자를 의미합니다.
아직 ch1을 subscribe하고 있는 구독 redis client를 생성하지 않았기 때문에 0을 리턴했습니다.
이제 또다른 redis client에서 ch1을 구독해보도록 하겠습니다.
아래의 명령어를 입력하면, 결과값으로 구독한 채널명과 integer를 반환합니다.
interger 값은 해당 redis client가 구독하고 있는 channel의 숫자를 의미합니다.
현재 하나의 채널(ch1)를 구독하고 있으니 1을 리턴했습니다.
이제 ch1을 구독하고 있는 subscriber가 생겼으므로 publisher client에서 다시한번 publish 명령어를 사용해 메시지를 발행하면 subscriber client에서는 해당 메세지를 전달받게됩니다.
redis에서는 channel을 생성하는 명령어는 존재하지 않습니다.
따라서 publisher와 subscriber는 메시지를 주고받을 채널명을 입력하기만 하면 됩니다.
2. Pattern Subscription
pattern subcription 기능을 사용하면 subscriber에서 특정 패턴과 일치하는 채널을 한번에 구독할 수 있습니다.
pattern subscription은 psubscribe 명령어로 사용할 수 있습니다.
아래의 명령어를 사용해 ch로 시작하는 모든 채널을 한번에 구독할 수 있습니다.
이후 publisher가 ch로 시작하는 채널에 메세지를 publish하면 위의 subscriber에 메세지가 전달됩니다.
3. PubSub
redis는 adminstrator가 효율적으로 subscriber를 관리할 수 있도록 pubsub이라는 명령어를 제공해줍니다.
3-1) numsub
numsub 명령어를 사용하면 특정 채널을 구독하고 있는 subscriber의 갯수를 확인할 수 있습니다.
주의점으로는 pattern subscription으로 구독하고 있는 subscriber는 count에 포함되지 않습니다.
3-2) numpat
pattern subscription의 subscriber 갯수는 아래의 명령어로 확인할 수 있습니다.
이때는 특정 채널의 subscriber가 아닌, 전체 subscriber의 갯수를 return 합니다.
4. 정리
위처럼 redis를 사용하면 간단히 message broker 시스템을 구축 할 수 있습니다.
spring boot에서 redis의 message broker 기능을 사용하는 방법은 아래의 글에서 다뤄보도록 하겠습니다. 😎
참고 자료 : https://www.udemy.com/course/redis-bootcamp-for-beginners/
'Redis' 카테고리의 다른 글
[Redis] HyperLogLog (0) | 2020.08.21 |
---|---|
[Redis] Geo (0) | 2020.08.21 |
[Redis] Transaction (0) | 2020.08.20 |
[Redis] Sorted Set (0) | 2020.08.20 |
[Redis] Set (0) | 2020.08.20 |