Redis 란?
Redis는 다양한 자료 구조를 지원하는 key-value 구조의 In-Memory 데이터 저장소이다.
1. key-value 구조
- NoSQL로 분류된다.
- 시간 복잡도는 O(1)
2. 다양한 자료 구조
- String, List, Set, Sorted Set, Hash
- Stream, HyperLogLog, Bitmap, Geospatial Index 등
- redis의 자료구조는 atomic한 성질을 가지고 있어서 race condition을 피할 수 있다.
3. In-Memory 데이터베이스
- 디스크가 아닌 메인 메모리에 데이터를 저장하여 빠르다.
- 명시적으로 데이터를 삭제하거나 만료를 설정할 수 있다.
- 만약 데이터를 넣을 공간이 없으면 LRU 혹은 LFU 알고리즘에 의해 key eviction이 발생한다.
- 장애 발생시 서버가 다운되면 데이터 유실될 수 있다. 때문에 데이터 보존을 위해 스냅샷 및 AOF 기능을 제공한다.
4. 싱글 스레드
- 서버 하나에 여러 개의 redis 서버를 띄울 수 있다. (주로 master - slave 구조)
- 시간이 오래 걸리는 연산 O(N)은 지양하는 편이 좋다.
- 멀티 스레드가 아닌 싱글 스레드여서 race condition을 피할 수 있다.
5. 오픈 소스
- Redis는 오픈 소스 기반이다.
사용처
- Remote Data Store : 글로벌 캐싱. A, B, C 서버에서 데이터를 공유하고 싶을 때 사용한다.
- Local Data Store : 로컬 캐싱. 한 대의 서버에서 사용할 때 전역 변수를 사용할 수도 있겠지만 레디스를 사용할 수도 있다. 레디스는 race condition을 피할 수 있다는 장점이 있다.
- 인증 토큰 저장 (Strings 또는 hash)
- Ranking 보드 (Sorted Set)
- 유저 API limit
- Job queue (list)
Redis vs. Memcached
Redis와 Memcached 둘 다 key-value In-Memory 저장소이기 때문에 자주 비교된다.
Redis | Memcached | |
사용처 | 캐시, 데이터베이스, 메시지 브로커, 큐 | 캐시, 세션 저장소 |
데이터 구조 / 크기 제한 | 다양한 데이터 구조 지원 (~512MB) | String만 지원 (~1MB) |
스레드 | 싱글 스레드 | 멀티 스레드 |
데이터 저장 (Persistence / snapshot) |
O | X |
데이터 복제 (replication) | O | X |
트랜잭션 지원 | O | X (작업이 원자적이긴 함) |
Pub/Sub 지원 | O | X |
참고 자료
- How does redis claim O(1) time for key lookup?
- 개발자를 위한 레디스 튜토리얼 01
- [Database] Redis에 대해 알아보자 (Redis 컬렉션, Sentinel, Cluster, 운영시 장애 포인트)
- [우아한테크세미나] 191121 우아한레디스 by 강대명님
'개발 > 기타' 카테고리의 다른 글
Postman 환경 변수 설정하기 (0) | 2024.10.07 |
---|---|
[Git] Git 명령어 (0) | 2022.07.17 |
[Python] pip install 시 microsoft visual c++ 14.0 or greater is required 해결 (0) | 2022.05.11 |
Window에서 direnv 설치 (0) | 2022.05.03 |
[MongoDB] MongoDB 설치하기 (0) | 2022.03.14 |