티스토리 뷰

 

1. Redis란

Redis는 인메모리 데이터베이스로, 다양한 자료구조를 key-value 형태로 저장할 수 있다. 캐시, 세션, 랭킹 시스템, 실시간 처리 등에 보다 적합하다.

 

2. String (문자열)

 가장 기본적인 자료형으로 숫자, 문자열 모두 저장이 가능하다. TTL(만료 시간), 조건부 저장(NX, XX) 등 다양한 옵션이 있다.

 

2-1. 주요 명령어

SET key value                  # 값 설정 (기존 값 덮어씀)
GET key                        # 값 조회
DEL key                        # 삭제
MSET k1 v1 k2 v2 ...           # 여러 key에 값 설정
MGET k1 k2 ...                 # 여러 key의 값 조회
INCR key                       # 숫자 증가 (1씩)
DECR key                       # 숫자 감소 (1씩)
INCRBY key amount              # 특정 수만큼 증가
DECRBY key amount              # 특정 수만큼 감소
FLUSHALL                      # 전체 데이터 삭제

 

2-2. 예시

SET hello world
GET hello                     => "world"
SET visitors 0
INCR visitors                 => 1
INCRBY visitors 10           => 11

 

3. List (리스트)

 양쪽에서 삽입/삭제 가능한 Linked List로, 채팅 메시지, 큐(queue)등에 주로 사용된다.

 

3-1. 주요 명령어

LPUSH key value               # 왼쪽에 값 삽입
RPUSH key value               # 오른쪽에 값 삽입
LPOP key                      # 왼쪽에서 제거
RPOP key                      # 오른쪽에서 제거
LRANGE key start stop         # 범위 조회
LLEN key                      # 리스트 길이
LSET key index value          # 인덱스 위치에 값 설정

 

3-2. 예시

LPUSH l 1 2 3                 => 리스트: [3, 2, 1]
RPUSH l -1 -2                 => [3, 2, 1, -1, -2]
LRANGE l 0 -1                 => 전체 조회
LPOP l                        => "3"

 

4. Set (집합)

 중복 없는 값의 모음으로, 교집합, 합집합, 차집합 등의 계산이 가능하다.

 

4-1. 주요 명령어

SADD key member ...           # 값 추가
SMEMBERS key                  # 모든 값 조회
SISMEMBER key member          # 특정 값 존재 여부
SCARD key                     # 집합 크기
SINTER key1 key2              # 교집합
SDIFF key1 key2               # 차집합
SUNION key1 key2              # 합집합
SREM key member               # 값 제거

 

4-2. 예시

SADD votes:song:1 user:1
SADD votes:song:1 user:2
SISMEMBER votes:song:1 user:1   => 1
SUNION votes:song:1 votes:song:2

 

5. Hash (해시)

 작은 데이터 구조를 저장할 수 있는 key-value 집합으로, 유저 프로필, 설정값 저장 등에 적합하다.

 

5-1. 주요 명령어

HSET key field value ...       # 필드 설정
HGET key field                 # 필드 조회
HGETALL key                    # 모든 필드-값 조회
HMGET key field1 field2 ...    # 여러 필드 조회
HINCRBY key field amount       # 숫자 필드 증가
HEXISTS key field              # 필드 존재 여부

 

5-2. 예시

HSET player:1 name nico xp 0 health 100
HGET player:1 name             => "nico"
HINCRBY player:1 xp 10
HGETALL player:1

 

6. Sorted Set (정렬된 집합)

 점수(score)를 기반으로 자동 정렬되는 집합으로, 랭킹 시스템에 매우 유용하다.

 

6-1. 주요 명령어

ZADD key score member ...      # 점수와 함께 삽입
ZRANGE key start stop [WITHSCORES]     # 낮은 점수 순 정렬
ZREVRANGE key start stop [WITHSCORES]  # 높은 점수 순 정렬
ZRANK key member               # 정렬된 순서 조회
ZINCRBY key increment member   # 점수 증가
ZRANGEBYSCORE key min max      # 점수 범위로 조회
ZCOUNT key min max             # 점수 범위의 개수
ZREM key member                # 삭제

 

6-2. 예시

ZADD scores 1 user:1 2 user:2 10 user:3
ZRANGE scores 0 -1 WITHSCORES
ZREVRANGE scores 0 -1 WITHSCORES
ZINCRBY scores 1 user:2

 

7. 보충 내용

7-1. TTL (Time to Live), 키 유효 시간

 Redis에는 키에 만료 시간을 설정할 수 있다. 일정 시간이 지나면 자동 삭제된다. 활용 예시로 로그인 세션 관리, 인증 코드 제한 시간, 캐시 데이터 자동 제거 등이 있다.

SET myKey myValue EX 10         # 10초 후 자동 삭제
EXPIRE myKey 30                 # 기존 키에 TTL 설정
TTL myKey                       # 남은 TTL 확인
PERSIST myKey                   # TTL 제거 → 영구 저장

 

7-2. Key 네이밍 규칙 (Prefix Convention)

 Redis는 key-value 기반이라 데이터를 의미 있게 구조화하는 것이 중요하다. 이를 위해, 일반적으로 : (콜론)을 사용해서 계층 구조처럼 만든다. 이를 통해 검색 시 보다 쉽게 찾을 수 있으며, 데이터의 의도를 명확하게 표현할 수 있다.

users:1:name         => nico
users:1:email        => nico@example.com
votes:song:1         => Set 자료형 (투표 유저 목록)
messages:room:abc    => List 자료형 (채팅 내역)

 

7-3. FLUSHALL / FLUSHDB 주의사항

 삭제 시 복구가 불가능하니 주의해야 한다. 추가로, redis.conf에서 rename-command FLUSHALL "" 으로 명령어 비활성화 가능

FLUSHALL     # 모든 데이터베이스의 모든 키 삭제
FLUSHDB      # 현재 선택된 DB의 모든 키 삭제

 

7-4. Redis의 영속성 (Persistence)

 Redis는 인메모리 DB지만, 디스크에 백업할 수 있는 기능도 있다. 서버 재시작 이후에도 데이터 복원이 필요할 때, Redis를 캐시 뿐만이 아니라 DB처럼 쓸 때 유용하다.

방식 설명 특징
RDB 특정 시점의 스냅샷 저장 빠르고 효율적 (백업용)
AOF 모든 명령어를 파일에 기록 데이터 복원에 유리
ROD + AOF 병행 설정 가능 안정성과 성능 둘 다 확보

 

redis-cli SAVE         # 즉시 RDB 저장
redis-cli BGSAVE       # 백그라운드로 저장

 

7-5. Pub/Sub (발행/구독 메시징 시스템)

 Redis는 메시지 브로커 역할도 할 수 있다. 사용 예사로 실시간 알림 시스템, 채팅 메시지 브로드캐스트, 서버 간 통신 등이 있다.

SUBSCRIBE news:sports          # 구독
PUBLISH news:sports "update"   # 발행

 

7-6. Redis 데이터베이스 구분 (SELECT)

 Redis는 기본적으로 16개의 논리 DB를 제공한다. (0 ~ 15) DB간의 데이터는 격리되며, FLUSHDB는 현재 선택된 DB만을 비운다.

SELECT 0     # 기본 DB
SELECT 1     # 다른 DB로 전환

 

7-7. Memory 관련 설정

Redis는 RAM 기반이기 때문에, 메모리 사용량을 초과하지 않도록 주의해야 한다.

maxmemory 256mb
maxmemory-policy allkeys-lru
정책 설명
noeviction 메모리가 부족하면 에러 반환 (기본값)
allkeys-lru 전체 키 중 가장 오래된 키부터 제거
volatile-ttl TTL이 설정된 키 중 가장 빠른 것부터 제거

 

7-8. 보충 내용 요약

개념 내용 요약
TTL 키의 자동 만료 시간 설정 (EX, PX)
Key 네이밍 :으로 계층 구조 표현 (users:1:name)
FLUSHALL 주의 전체 삭제 명령 → 실서버 금지 혹은 주의
Persistence RDB, AOF로 데이터 영속성 유지
Pub/Sub 실시간 메시지 발행/구독 시스템
SELECT DB Redis의 DB 전환 (SELECT 1)
Memory 정책 메모리 초과 시 삭제 규칙 설정 (LRU 등)

 


관련 문서

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함