Redis 트랜잭션, 파이프라이닝(Pipelining), Pub/Sub 기능 개요
KUKJIN LEE • 3일 전 작성
1. Redis 트랜잭션(Transaction) 개요
트랜잭션은 명령을 원자적(Atomic)으로 실행하는 기능을 의미합니다. 즉 트랜잭션 내에 담긴 명령어들(MULTI 이후, EXEC 이전의 명령어들)은 부분적으로만 실행하거나 반영할 수 없습니다. 성공 시 모두 반영, 실패 시 모드 실패 일관성을 유지할 수 있습니다.
-
MULTI: 트랜잭션 시작을 알림
-
EXEC: 트랜잭션 내 명령어들을 일괄 실행
-
DISCARD: 트랜잭션 중단(모든 큐잉된 명령어 폐기)
# 트랜잭션 시작
MULTI
SET user:1001:points 100
INCRBY user:1001:points 50
EXEC
# 결과: 모든 명령어가 원자적으로 처리되어 user:1001:points = 150
복잡한 롤백 기능을 지원하지 않지만, 명령어들의 일괄 실행을 보장해 데이터 정합성 문제를 해결하는 데 유용합니다.
2. 파이프라이닝(Pipelining)를 통한 성능 향상
여러 Redis 명령어를 한 번에 서버로 전송하여, 명령어별 요청-응답 왕복(Round Trip)시간을 줄이는 기법입니다. 100개의 Set 명령을 순차적으로 실행할 경우, 각 명령마다 요청과 응답을 주고받기 때문에 지연이 누적됩니다. 하지만 파이프라이닝을 통해 명령어를 한번에 전송하면, 서버에서는 이를 빠르게 처리하고 결과를 한 번에 반환할 수 있습니다.
-
클라이언트가 MULTI/EXEC와 관계없이 명령어들을 메모리에 쌓아둔다.
-
모든 명령어를 한 번에 Redis 서버로 전송한다.
-
Redis 서버는 명령어들을 순차적으로 실행하고 결과를 한 번에 반환한다.
파이프라이닝은 네트워크 왕복 횟수를 크게 줄여 고성능을 달성하는 핵심 기능입니다. 특히 높은 TPS를 요구하는 상황이나, 대량의 데이터 초기화 작업 등에 매우 유용합니다.
3. Pub/Sub 기능을 통한 기본 메시지브로커 이해
발행자(Publisher)가 메시지를 특정 채널에 발행하면, 해당 채널을 구독(Subscriber)하는 모두에게 메시지가 전송되는 기능입니다. 실시간 알림, 채팅 시스템, 간단한 이벤트 처리 등에 자주 활용됩니다.
-
PUBLISH channel message: 채널에 메시지 발행
-
SUBSCRIBE channel: 특정 채널을 구독
-
UNSUBSCRIBE channel: 특정 채널 구독 해제
# 터미널 1: 구독자
SUBSCRIBE news
# 터미널 2: 발행자
PUBLISH news "Breaking News: Redis 7.0 Released!"
# 터미널 1에서는 실시간으로 "Breaking News: Redis 7.0 Released!" 수신
Redis에서는 메시지 영구 저장, 재처리가 제한적입니다. 단순한 실시간 알림 전파에 유용합니다.