개요
2024.07.30-[Redis] Pub/Sub 개념에서 Publish, Subscriber 개념에 대해 적어두었었다. 이 글에서는 redis-cli를 사용해 직접 테스트를 해보자.
테스트를 하기 위해서는 먼저 Redis가 있어야 한다. 2023.05.30-[Redis] 개념 및 설치/실행을 참고하여 설치한다.
또한 Publisher, Subscriber가 필요하므로 redis-cli를 각각 다른 세션에서 실행하여 테스트한다.
관련 명령어
Publish, Subscribe와 관련된 명령어는 다음과 같다.
명령어 | 설명 |
subscribe <CHANNEL> | 채널을 구독하여 메시지를 수신받는다. 한 번에 여러 채널을 구독할 수 있다. |
publish <CHANNEL> <MESSAGE> | 메시지를 채널에 송신한다. |
pubsub | 서버에 등록된 채널이나 패턴을 조회한다. |
psubscribe <PATTERN> | 채널 이름을 패턴으로 등록한다. |
unsubscribe <CHANNEL> | 채널 구독을 해제한다. |
punsubscribe <PATTERN> | 패턴으로 구독한 채널의 구독을 해제한다. |
subscribe
subscribe는 명시한 채널을 구독한다. 채널 이름을 여럿 전달하여 여러 개의 채널을 구독할 수 있다. 결괏값으로는 구독한 채널명과 채널을 구독하고 있다는 의미의 값 1을 반환한다.
subscribe <CHANNEL>
subscribe <CHANNEL>, <CHANNEL>
-- 예시
subscribe ch1
구독은 ctrl + c 로 종료할 수 있다.
publish
publish는 지정한 채널에 메시지를 게시한다.
publish <CHANNEL> <MESSAGE>
-- 예시
publish ch1 'hello, world!'
예시로 ch1라는 채널에 hello, world!라는 메시지를 게시했다. ch1를 구독하고 있는 클라이언트 쪽을 확인해 보면 아래와 같이 publisher가 게시한 메시지를 확인할 수 있다.
psubscribe
psubscribe 명령은 채널을 패턴으로 구독하는 명령어다.
psubscribe <PATTERN>
-- 예시
psubscribe ch*
이 때 publisher가 ch2이라는 채널로 메시지를 전달하면, 다음과 같이 전달받은 메시지를 확인할 수 있다.
pubsub
Redis 관리자가 subscriber를 관리할 때 사용하는 명령어다. 활성화된 채널을 확인하거나, 특정 채널을 구독하고 있는 subscriber의 수를 확인하는 등의 작업을 수행할 수 있다. 아래 내용은 redis-cli에서 pubsub에 대한 help 명령으로 확인할 수 있는 내용이다.
1) PUBSUB <subcommand> arg arg ... arg. Subcommands are:
2) CHANNELS [<pattern>] -- Return the currently active channels matching a pattern (default: all).
3) NUMPAT -- Return number of subscriptions to patterns.
4) NUMSUB [channel-1 .. channel-N] -- Returns the number of subscribers for the specified channels (excluding patterns, default: none).
- 채널 확인
channels 명령어로는 활성화되어 있는 채널을 확인할 수 있다.
pubsub channels [<PATTERN>]
-- 예시
pubsub channels
만약 활성화되어 있는 채널이 없으면 (empty list or set)와 같은 반환을 확인할 수 있다.
- 채널 구독 수 확인
numsub 명령은 채널을 구독하고 있는 클라이언트의 수를 반환한다. 채널 pattern으로 구독하고 있는 클라이언트는 제외한 값을 확인할 수 있다.
pubsub numsub <CHANNEL>
-- 예시
pubsub numsub ch1
- 패턴 채널 구독 수 확인
numpat은 psubscribe으로 채널을 구독하고 있는 클라이언트의 수를 반환한다. 확인하고자 하는 채널 패턴을 별도로 지정할 수 없기 때문에 항상 모든 클라이언트의 수를 반환한다.
pubsub numpat
참고 문서
🗃️ REDIS의 PUB/SUB 기능 (채팅 / 구독 알림)
https://lucas-owner.tistory.com/60