티스토리 뷰
목차
1. Redis의 개념

- 레디스(Redis)는 Remote Dictionary Server의 약자로서[4], "키-값" 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스 (DBMS)이다. 2009년 살바토르 산필리포(Salvatore Sanfilippo)가 처음 개발했다. 2015년부터 Redis Labs가 지원하고 있다. 모든 데이터를 메모리로 불러와서 처리하는 메모리 기반 DBMS이다. BSD 라이선스를 따른다. DB-Engines.com의 월간 랭킹에 따르면, 레디스는 가장 인기 있는 키-값 저장소이다.
출처 : 나무위키
2. Redis의 특징
- In-Memory 데이터 저장소
- Redis는 모든 데이터를 메모리에 저장하여 빠른 읽기 및 쓰기 성능을 제공
- 영속성을 위해 디스트로 저장할 수도 있지만 기본적으로 메모리 중심으로 설계되어 있음
- 서버의 메모리 용량을 초과하는 데이터를 처리할 경우, RAM의 특성인 휘발성에 따라 데이터가 유실될 가능성이 있음
- 다양한 데이터 자료구조 지원
- String
- redis의 가장 기본적인 type으로 key-value
- 최대 길이는 512MB
- INCR, DECR, INCRBY 명령어를 통해 Atomic counters(safe thread)를 구현할 수 있다.
- 예시 코드
SET user:name "Alice" GET user:name INCR user:age GET user:age
- List
- 값을 순서대로 저장할 수 있는 구조입니다.
- FIFO(First-In-First-Out) 및 LIFO(Last-In-First-Out) 방식 지원.
- 예시 코드
출력 예시:LPUSH tasks "task1" LPUSH tasks "task2" RPUSH tasks "task3" LRANGE tasks 0 -11) "task2" 2) "task1" 3) "task3"
- Sets
- 순서가 보장되지 않는 Strings의 집합 자료구조
- 트래킹에 사용될 수 있음
- 모든 태그를 나타내는 리스트에도 사용될 수 있음.
- 예시 코드
출력 예시:SADD tags "redis" SADD tags "database" SADD tags "nosql" SMEMBERS tags1) "redis" 2) "database" 3) "nosql"
- Hashes
- value로 또 다른 key-value Map을 가지는 자료구조
- 예시
출력 예시:HSET user:1000 name "Alice" HSET user:1000 age "30" HSET user:1000 city "Seoul" HGETALL user:10001) "name" 2) "Alice" 3) "age" 4) "30" 5) "city" 6) "Seoul"
- Sorted Set
- Sets 자료구조에 Score를 추가하여 Score가 낮은 순서부터 높은 순서대로 정렬되는 자료구조
- 온라인 게임의 랭킹에 사용될 수 있음
- 자주 Redis에 저장된 데이터의 index를 저장하기 위해 사용되기도 함
- 예시 코드
출력 예시:ZADD leaderboard 50 "Player1" ZADD leaderboard 100 "Player2" ZADD leaderboard 75 "Player3" ZRANGE leaderboard 0 -1 WITHSCORES1) "Player1" 2) "50" 3) "Player3" 4) "75" 5) "Player2" 6) "100"
- String

redis의 자료 Type
3. 지속성 (Persistence)
- Redis는 메모리 기반이지만, 데이터를 디스크에 영구적으로 저장할 수 있는 옵션을 제공
- AOF (Append On File) 방식
- Redis의 모든 write/update 연산 자체를 모두 log 파일에 기록하는 형태
- RDB (Snapshotting) 방식
- 순간적으로 메모리에 있는 내용 전체를 디스크에 담아 영구 저장하는 방식
- AOF (Append On File) 방식
4. 분산 시스템
- Redis Cluster를 통해 데이터를 여러 노드에 분산하여 처리할 수 있음 이를 통해 확장성 및 고가용성을 제공
- Master와 Slaves로 구성하여 여러대의 복제본을 만들 수 있고, 여러대의 서버로 읽기 가능
3. 사용시 주의할 점
- 시간 복잡도
- Redis는 기본적으로 Single Thread 사용으로 한번에 하나의 명령만 수행이 가능하므로 처리시간이 긴 요청의 경우 장애 발생
- 메모리 단편화
- 크고 작은 데이터를 할당하고 해제하는 과정에서 메모리의 파편화가 발생하여 응답 속도가 느려질 수 있음