| 프로그래밍 모델 |
동기(Sync) 기반 |
동기 + 비동기 + Reactive 모두 지원 |
완전 Reactive (Non-blocking) |
| 사용 목적 |
캐시, 간단한 Key-Value 접근 |
분산 락, RMap, RList, RQueue 등 고급 Redis 기능 제공 |
고성능 Non-blocking I/O 기반 처리 |
| Redis 프로토콜 사용 방식 |
Lettuce/Jedis 기반 추상화 |
자체 Redis Client + 고급 구조체 제공 |
Lettuce Reactive 기반 직접 접근 |
| 분산 락 지원 |
제한적 (직접 구현해야 함) |
강력한 분산 락 기능 제공(RLock) |
직접 Lua Script 등으로 구현 필요 |
| 데이터 구조 활용성 |
기본적(Hash, List, Set 등) |
Redis를 Java 컬렉션처럼 사용 가능 (RMap, RList …) |
기본 구조 (Reactive로 제공) |
| 트랜잭션 |
지원 (MULTI/EXEC) |
지원 |
Reactive Transaction 지원 |
| Pipeline / PubSub |
지원 |
지원 |
Reactive 기반으로 자연스럽게 지원 |
| 성능 |
보통 (Sync → 블로킹) |
보통~좋음(비동기 기능 효율적) |
최고 수준 (Non-blocking Netty) |
| 커넥션 풀 관리 |
Lettuce/Jedis 위임 |
자체 커넥션 풀 최적화 |
Reactive Netty 기반 효율적 |
| 클러스터 지원 |
지원 |
더 강력한 자동 failover/재전연결 지원 |
지원 |
| 학습 난이도 |
쉬움 |
보통 (기능이 많음) |
중간~높음 (Reactive 학습 필요) |
| 주요 장점 |
Spring 생태계와의 통합이 뛰어남 |
분산락, Fair Lock, RedLock 등 고급 기능 |
Reactive WebFlux와 자연스럽게 통합 |
| 주요 단점 |
블로킹 I/O |
라이브러리가 무겁고 추상화가 깊음 |
모든 호출이 Reactive여야 해서 러닝커브 큼 |
| 실무 사용 추천 |
간단한 캐시, Token 관리 |
분산 락, 재시도 로직, 고급 자료구조가 필요한 경우 |
고성능 스트리밍, 대량 트래픽 처리 |