티스토리 뷰
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 등) |
관련 문서
'기록' 카테고리의 다른 글
Python으로 SQL 간단히 이용해보기 및 Drizzle이란 (0) | 2025.04.26 |
---|---|
PostgreSQL의 확장 기능 (Extensions) 중 hstore, pgcrypto, uuid-ossp에 대해 정리 (0) | 2025.04.20 |
PostgreSQL의 JSON/JSONB 배운 것 정리 (0) | 2025.04.19 |
트랜잭션(Transaction)에 대해 배운 것 정리 및 예제 (0) | 2025.04.19 |
PostgreSQL Function & Procedure 배운 것 정리 (0) | 2025.04.13 |
- Total
- Today
- Yesterday
- Redux
- 자바스크립트
- 타입스크립트
- 순열
- BFS
- 스택
- C++
- 동적계획법
- 햄버거버튼
- react
- 알고리즘
- aws
- 카카오맵
- 브루트포스
- 프로그래머스
- themoviedb
- 코드스테이츠
- NextJS
- 넥스트js
- 비트마스킹
- async
- 백준
- typescript
- SQL
- 완전탐색
- Next.js
- 리액트
- 다이나믹프로그래밍
- 구현
- CSS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |