Redis 트랜잭션, 파이프라이닝(Pipelining), Pub/Sub 기능 개요
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에서는 메시지 영구 저장, 재처리가 제한적입니다. 단순한 실시간 알림 전파에 유용합니다.