📌 [Redis] Redis Pub/Sub 부하 테스트 및 성능 분석
2025. 3. 7. 20:55

🎯 Redis Pub/Sub 성능 테스트 개요

업무 프로젝트에서 Redis Pub/Sub을 활용하여 30개의 센서에서 초당 40KB 데이터를 발행(Publish) 하는 환경을 구축했습니다. 하지만 실제 부하 테스트를 진행한 결과, 메시지 수신 지연 및 성능 최적화가 필요한 부분이 발견되었습니다.

이번 테스트에서는 Redis의 성능을 검증하고, 부하가 증가했을 때의 메시지 처리 속도와 메모리 사용량을 분석했습니다. 이를 통해 Redis Pub/Sub을 활용할 때 고려해야 할 최적화 방안을 도출하고자 합니다.


1️⃣ 테스트 환경 및 실행 방법

테스트 목표:

  • Redis Pub/Sub의 부하 처리 성능을 검증
  • 메시지 수신 딜레이 및 손실 여부 확인
  • 부하 상황에서 메모리 및 네트워크 성능 분석

테스트 환경:

  • Redis 버전: 7.0+
  • 운영 방식: Docker 컨테이너 기반
  • 테스트 도구: redis-benchmark, redis-cli, info memory, info stats

실행 방법:

1. Publisher(발행자) - 30개의 센서 데이터 전송

while true; do docker exec -it redis-server redis-cli PUBLISH sensor-data "Test message"; sleep 0.1; done

 

 

2. Subscriber(구독자) - 메시지 수신 확인

docker exec -it redis-server redis-cli
127.0.0.1:6379> SUBSCRIBE sensor-data

 

3. 성능 부하 테스트 (redis-benchmark)

docker exec -it redis-server redis-benchmark -t publish -r 100000 -n 100000 -P 30

 

4. 메모리 사용량 및 성능 통계 확인

docker exec -it redis-server redis-cli info memory
docker exec -it redis-server redis-cli info stats

2️⃣ 테스트 결과 분석

1. 메모리 사용량 (info memory)

항목 결과값 의미
used_memory_human 1.16MB 현재 Redis가 사용 중인 메모리
used_memory_peak_human 1.33MB 메모리 사용량 피크 (최대치)
mem_fragmentation_ratio 9.34 메모리 단편화 비율 (최적화 필요)
maxmemory_policy noeviction 메모리 초과 시 데이터를 삭제하지 않음

📌 결론:

  • 메모리 사용량은 비교적 낮게 유지되었으며, 메모리 부족으로 인한 성능 저하는 없음
  • 다만, 메모리 단편화 비율(9.34)이 높음 → 최적화 필요

3️⃣ Redis Pub/Sub 최적화 방안

📌 1. 성능 최적화를 위한 조치
✔ notify-keyspace-events 활성화하여 이벤트 처리 성능 개선
✔ active-defrag yes 설정하여 메모리 단편화 문제 해결
✔ maxmemory 정책을 적절히 설정하여 메모리 관리 최적화

 

📌 2. Redis Streams 도입 고려
현재 Redis Pub/Sub은 높은 부하에서 딜레이가 발생할 가능성이 있음.
✅ Redis Streams는 Pub/Sub보다 안정적인 메시지 보관 기능 제공
메시지 유실 방지 기능이 있어 대량의 데이터 처리에 적합

XADD sensor-data-stream * message "High Performance Stream Message"

🚀 결론: Redis Pub/Sub vs Redis Streams?

🔹 Redis Pub/Sub
✔ 실시간 메시징이 필요할 때
✔ 메시지 손실이 큰 문제가 되지 않을 때
✔ 단순한 이벤트 브로드캐스팅 목적

 

🔹 Redis Streams
✔ 메시지 순서 보장이 필요할 때
✔ 과거 메시지 조회 및 재처리가 필요할 때
✔ 대량의 데이터 처리가 필요할 때

현재 Redis Pub/Sub은 정상 작동하지만, 고부하 환경에서는 Redis Streams와 Cluster Mode 고려 필요! 🚀🔥