Java Redis Client

이상윤·2025년 12월 15일

CS

목록 보기
3/4

이번에 Lettuce관련 스터디를 시작하기로 하였다.
부끄럽지만, Redis를 연동해서 사용해 보았는데도 불구하고 Lettuce가 뭔지도 몰라서 검색하고 나서야 어떤 기술인지 대충 알게 되었다.

그래서, 이번 포스팅을 진행하며 어떤 녀석인지 자세히 알아가보는 과정을 거치려고 한다.

먼저, Redis Client에는 여러 종류가 있다.

Spring에서 Redis를 사용할때는, 대부분 RedisTemplate를 사용하기 때문에 클라이언트 종류를 신경쓰지 않는 경우가 종종 있다.

하지만 Redis 성능 문제나 장애가 발생했을 때, 어떤 클라이언트를 사용했는지를 아는 것이 매우 중요하다.
왜냐하면 클라이언트마다 I/O 방식, 스레드 모델, 커넥션 관리 방식이 모두 다르기 때문이다.

클라이언트는 대표적으로 Jedis, Lettuce, Redission이 있는데 이를 간단히 소개해보도록 하겠다.

Jedis

Jedis는 가장 오래된 Redis Java 클라이언트로, 한때 스프링에서 가장 널리 쓰이던 방식이다. 다른 클라이언트에 비해 가볍고, 구현하기 쉽다는 장점이 있다.

Jedis는 Blocking I/O기반으로, 요청하는 스레드가 응답을 받을때까지 멈추는 특징을 가지고 있다. 이로 인해 멀티스레드 환경에서 사용하려면 JedisPool을 설정해주어야 한다.
하지만 레디스 자체의 커넥션 수에 제한이 걸리거나 합리적인 커넥션 수를 초과하지 않기 위해, 커넥션 수를 제한해야 하는 상황이 있다는 점을 유의해야 한다.

Lettuce

Lettuce는 Netty 기반의 비동기/논블로킹 Redis 클라이언트로,
Spring Boot 2.x 이후로 기본 채택되었다. Netty 기반의 복잡하지만 유연한 추상화를 통해 애플리케이션을 손쉽게 확장할 수 있는 구조를 제공한다는 특징이 있다.

Lettuce의 특징

  • Netty 기반
    Lettuce는 Netty의 이벤트 루프(EventLoop) 기반으로 동작한다.
    즉, 요청·응답 처리를 특정 스레드가 점유하지 않고 이벤트 기반으로 처리하고, 이를 통해 고성능/고확장성을 제공한다.

  • 비동기 / 논블로킹 I/O
    요청 시 스레드가 블로킹되지 않는다.
    비동기 Future/Promise를 통해 응답을 받을 수 있다.
    Reactor 기반의 ReactiveRedisTemplate와도 자연스럽게 연동된다.

  • 스레드 안전(Thread-safe)
    Lettuce는 하나의 커넥션을 멀티스레드에서 안전하게 사용할 수 있다.
    이는 Jedis 대비 커넥션 수를 크게 줄일 수 있다는 의미다.

  • 동기, 비동기, 리액티브 모두 지원
    Sync API, Async API, Reactive API(Reactor 사용) 필요한 형태에 맞게 다양하게 선택할 수 있다.

Redisson

Redisson은 단순 Redis 클라이언트를 넘어서 Redis 기반 분산 자료구조 및 분산 락 기능을 제공하는 고급 라이브러리다.

Redisson의 핵심 특징

  • 분산 락
  • 분산 큐
  • 분산 Set/Map/List
  • Pub/Sub
  • Scheduler 등으로,

Redis를 단순 캐시가 아니라 분산 시스템을 구축하기 위한 핵심 구성요소로 활용할 때 매우 유용하다.

단순 캐시 용도라면 오버킬일 수 있다.

0개의 댓글