Skip to main content Link Search Menu Expand Document (external link) Copy Copied

Redis

Redis는 인메모리 데이터 저장소로, 빠른 속도로 데이터를 저장하고 접근할 수 있다. 데이터베이스처럼 사용할 수 있지만, 일반적으로 캐시, 세션 관리, 순위표(리더보드) 등의 용도로 사용된다.


Redis 설치 방법

  1. 직접 설치하기
    • brewapt를 이용해 설치할 수 있다. 다만 설정이 까다롭고 환경에 따라 문제가 발생할 수 있어서 잘 사용하지 않는다.
  2. Docker 사용하기 (권장)
    • Docker Compose를 활용하면 Redis를 손쉽게 설치하고 구성할 수 있다. docker-compose.yml 파일로 쉽게 관리할 수 있어 편리하다.
  3. Download Center
    • Mac 사용자는 DMG 파일을, Windows 사용자는 EXE 파일을 다운로드하여 설치할 수 있다.
    • App Store나 Microsoft Store에서 설치할 수 있는 방법도 있다.

Redis 이미지 종류

  • redis-stack
    Redis 서버와 Redis Insight(전용 IDE)가 포함된 버전이다.

  • redis-stack-server
    Redis Insight 없이 간단한 버전으로, 캐시 서버나 세션 저장소로 활용할 때 적합하다. IDE 플러그인(IntelliJ 등)을 사용하면 충분히 대체할 수 있다.


Redis와 RDB의 차이

특징 RDB Redis
데이터 구조 여러 개의 테이블과 컬럼 기반 데이터 저장 Key-Value 형태
저장 방식 디스크 기반 저장 메모리 기반 저장
사용 사례 복잡한 관계형 데이터 관리 캐시, 세션 관리, 간단한 데이터 저장

Redis는 관계형 데이터베이스(RDB)와는 다르게 테이블 구조를 사용하지 않고, Key-Value 형태로 데이터를 저장한다. 거대한 자바의 Map처럼 생각할 수 있다.


Redis 자료형과 명령어

Redis는 여러 자료형을 지원해서 상황에 맞는 데이터를 효율적으로 다룰 수 있다.


문자열 (String)

-- 문자열 저장 및 조회
SET user:email alex@example.com
GET user:email

-- 정수 연산
SET user:count 1
INCR user:count
DECR user:count

-- 여러 데이터 동시 저장 및 조회
MSET user:name alex user:email alex@example.com
MGET user:name user:email

문자열은 Key-Value 형태로 데이터를 저장하며, 숫자 데이터의 경우 INCR, DECR 명령어로 간단히 값을 증가시키거나 감소시킬 수 있다.


리스트 (List)

-- 스택/큐처럼 사용 가능한 리스트
LPUSH user:list alex
RPUSH user:list chad

-- 리스트에서 데이터 꺼내기
LPOP user:list
RPOP user:list

-- 리스트 크기와 범위 조회
LLEN user:list
LRANGE user:list 0 -1  -- 전체 조회

리스트는 데이터의 순서가 중요할 때 사용한다. 스택이나 큐처럼 동작하며, 왼쪽이나 오른쪽에서 데이터를 추가하거나 꺼낼 수 있다.


집합 (Set)

-- 중복 없는 데이터 관리
SADD user:java alex brad chad
SREM user:java alex

-- 데이터 존재 여부 확인
SISMEMBER user:java brad

-- 집합 연산 (교집합, 합집합)
SINTER user:java user:python  -- 교집합
SUNION user:java user:python  -- 합집합

집합은 중복을 허용하지 않는 데이터 모음이다. 여러 데이터 그룹을 쉽게 비교할 수 있는 집합 연산도 지원한다.


정렬된 집합 (Sorted Set)

-- 점수와 함께 데이터 저장
ZADD user:ranks 10 alex
ZADD user:ranks 8 dave

-- 순위 조회
ZRANK user:ranks alex
ZRANGE user:ranks 0 2

정렬된 집합은 점수를 부여해 데이터의 순서를 유지하면서 저장할 수 있다. 순위표나 리더보드를 구현할 때 유용하게 사용할 수 있다.


해시 (Hash)

-- 필드-값 쌍으로 데이터 저장
HSET user:alex name alex age 25
HGET user:alex age

-- 모든 필드와 값 조회
HGETALL user:alex

해시는 필드와 값의 쌍을 저장한다. 복잡한 데이터 구조를 저장할 때 유용하고, 객체와 비슷한 방식으로 데이터를 다룰 수 있다.


기타 명령어

-- 키 삭제
DEL user:email

-- 만료 시간 설정하기
SET tempkey "value"
EXPIRE tempkey 10  -- 10초 후 삭제

-- 와일드카드 키 검색
KEYS user:*

DEL 명령어로 키를 삭제하거나, EXPIRE로 만료 시간을 설정해 자동으로 데이터를 삭제할 수도 있다. KEYS 명령어로 특정 패턴의 키를 쉽게 검색할 수 있다.


Spring Data Redis 사용법

주요 사용법

  1. @RedisHash
    • 객체를 저장하고 관리하기 위해 사용되는 어노테이션이다. String 타입의 ID는 UUID 형식으로 자동 생성되며, 임시 데이터를 다루기 적합하다.
  2. RedisTemplate
    • 다양한 Redis 자료형을 Java 객체 형태로 다룰 수 있도록 도와준다.
    • 주요 클래스:
      • ValueOperations (문자열)
      • SetOperations (집합)

Redis는 Simple is Best 철학에 따라 간단하고 강력한 데이터 관리 기능을 제공한다. 자료형의 특성을 잘 활용하면 다양한 요구 사항에 최적화된 솔루션을 만들 수 있다.


실습

GitHub