Redis
Redis는 인메모리 데이터 저장소로, 빠른 속도로 데이터를 저장하고 접근할 수 있다. 데이터베이스처럼 사용할 수 있지만, 일반적으로 캐시, 세션 관리, 순위표(리더보드) 등의 용도로 사용된다.
Redis 설치 방법
- 직접 설치하기
brew
나apt
를 이용해 설치할 수 있다. 다만 설정이 까다롭고 환경에 따라 문제가 발생할 수 있어서 잘 사용하지 않는다.
- Docker 사용하기 (권장)
- Docker Compose를 활용하면 Redis를 손쉽게 설치하고 구성할 수 있다.
docker-compose.yml
파일로 쉽게 관리할 수 있어 편리하다.
- Docker Compose를 활용하면 Redis를 손쉽게 설치하고 구성할 수 있다.
- Download Center
- Mac 사용자는
DMG
파일을, Windows 사용자는EXE
파일을 다운로드하여 설치할 수 있다. - App Store나 Microsoft Store에서 설치할 수 있는 방법도 있다.
- Mac 사용자는
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 사용법
주요 사용법
- @RedisHash
- 객체를 저장하고 관리하기 위해 사용되는 어노테이션이다.
String
타입의 ID는 UUID 형식으로 자동 생성되며, 임시 데이터를 다루기 적합하다.
- 객체를 저장하고 관리하기 위해 사용되는 어노테이션이다.
- RedisTemplate
- 다양한 Redis 자료형을 Java 객체 형태로 다룰 수 있도록 도와준다.
- 주요 클래스:
ValueOperations
(문자열)SetOperations
(집합)
Redis는 Simple is Best 철학에 따라 간단하고 강력한 데이터 관리 기능을 제공한다. 자료형의 특성을 잘 활용하면 다양한 요구 사항에 최적화된 솔루션을 만들 수 있다.