레디스
레디스(Redis)는 인메모리 데이터 구조 저장소로, 빠른 속도와 다양한 데이터 구조를 지원하는 데이터 베이스.
1. 인메모리 데이터베이스 (In-memory Database)
* 데이터를 디스크가 아닌 메모리에 저장하는 데이터베이스.
* 레디스는 인메모리 데이터베이스로, 높은 속도와 성능을 제공
2. 키-값 저장소 (Key-Value Store)
* 데이터가 키와 값 형태로 저장된다.
* 레디스는 이 방식으로 데이터를 저장하며, 키는 고유해야 하고 값을 통해 데이터를 조회할 수 있다.
3. 데이터 구조 (Data Structure)
* 레디스는 기본적인 문자열(String)을 비롯하여 리스트(List), 셋(Set), 해시(Hash), 정렬된 셋(Sorted Set) 등
다양한 데이터 구조를 지원.
4. Pub/Sub (Publish/Subscribe)
* 메시지 기반 시스템에서 사용하는 패턴으로, 한 프로세스가 메시지를 발행(Publish)하고, 다른 프로세스가 그 메시지를 구독(Subscribe)하는 방식
5. 슬로우 로그 (Slow Log)
* 레디스 명령어 실행 시간이 일정 기준 이상인 경우 이를 기록하는 로그.
* 성능 분석과 최적화를 위한 도구로 활용.
6. 영속성(Persistence)
* 레디스는 기본적으로 메모리에만 데이터를 저장하지만, 영속성을 설정하면 데이터를 디스크에 저장할 수 있다.
* 영속성 방식으로는 RDB (스냅샷), AOF (Append-Only File) 방식이 있다.
7. RDB (Redis Database Dump)
* 일정 시간 간격으로 레디스의 데이터를 스냅샷 형태로 디스크에 저장하는 방식.
8. AOF (Append-Only File)
* 레디스에서 수행된 모든 쓰기 명령을 로그 파일에 기록하여, 서버 재시작 시 해당 명령을 재실행하여 데이터를 복구하는 방식.
9. 레플리케이션 (Replication)
* 하나의 레디스 서버(마스터 서버)의 데이터를 다른 서버(슬레이브 서버)에 복제하는 방식.
* 이를 통해 데이터의 가용성과 내구성을 높일 수 있다.
10. 클러스터링 (Clustering)
* 여러 대의 레디스 서버를 클러스터로 구성하여 데이터를 분산 저장하고, 더 큰 데이터셋을 처리할 수 있도록 하는 방식.
11. TTL (Time-To-Live)
* 레디스에 저장된 데이터에 만료 시간을 설정하는 기능.
* TTL이 설정된 데이터는 일정 시간이 지나면 자동으로 삭제된다.
12. LRU (Least Recently Used)
* 메모리가 가득 찼을 때 가장 오래 사용되지 않은 데이터를 삭제하는 알고리즘.
* 레디스는 메모리 제한을 설정할 수 있으며, 이 방식으로 데이터를 관리.
13. 트랜잭션 (Transaction)
* 여러 명령을 하나의 단위로 묶어 원자성 있게 처리할 수 있는 기능.
* MULTI, EXEC, DISCARD, WATCH 명령어로 트랜잭션을 처리할 수 있다.
14. 하이퍼로그로그 (HyperLogLog)
* 매우 큰 데이터의 유일한 개수를 근사적으로 세는 자료구조.
* 메모리 사용을 최소화하면서 큰 규모의 데이터를 처리할 수 있다.
15. 비트맵 (Bitmap)
* 1과 0으로 이루어진 비트 배열을 사용하여 데이터를 효율적으로 처리하는 자료구조.
-> 레디스는 다양한 데이터 구조와 기능을 제공해 빠르고 효율적인 데이터 처리가 가능하며, 실시간 애플리케이션에서 널리 사용
✅ 대표적인 캐싱 전략
1. Write-Through Cache (쓰기 직후 캐싱)
* 데이터베이스(DB)에 데이터를 쓰면서 캐시에도 즉시 저장하는 방식.
* 장점: 항상 최신 데이터 유지
* 단점: 쓰기 성능이 낮아질 수 있음
* Redis도 이 방식으로 사용할 수 있음.
2. Write-Back Cache (캐시에 먼저 저장 후 나중에 DB 반영)
* 데이터를 캐시에 먼저 저장하고, 일정 시간이 지나거나 특정 조건이 되면 DB에 저장하는 방식.
* 장점: 쓰기 성능이 빠름
* 단점: 캐시 장애 시 데이터 유실 위험
* Redis에서 AOF(Append-Only File) 방식을 사용하면 유사한 효과를 낼 수 있음.
3. Write-Around Cache (캐시는 읽기만, 쓰기는 DB에서 직접)
* 데이터 저장 시 캐시를 거치지 않고 DB에만 저장.
* 장점: 캐시 불필요한 데이터 저장 방지
* 단점: 데이터 갱신 직후 캐시에 없어서 초기 조회가 느릴 수 있음
* Redis도 특정 정책을 설정하면 이 방식으로 활용 가능.
4. Lazy Loading (Cache-aside) (필요할 때만 캐싱)
* 데이터를 요청할 때 먼저 캐시를 확인하고, 없으면 DB에서 가져와 캐시에 저장.
* 장점: 불필요한 캐시 저장을 줄일 수 있음
* 단점: 처음 요청 시 느릴 수 있음
* Redis의 가장 일반적인 사용 방식.
5. Least Recently Used (LRU) / Least Frequently Used (LFU) Eviction
* 오래된 캐시 데이터를 제거하는 방식
* Redis는 기본적으로 LRU, LFU, TTL(Time-To-Live) 기반의 캐시 만료 정책을 제공함.