Redis에 대해서 간단히 설명해주세요
면접용 답변
redis는 키-값 형태로 저장하는 nosql 데이터베이스입니다. redis는 문자열, 해시, 리스트, 셋, 정렬된 셋 등 다양한 데이터 구조를 지원하며, 캐싱, 메시지 브로커, 큐, 세션 관리에서 사용될 수 있습니다. 그중에서 주로 캐시 서버를 구현할 때 많이 사용합니다.
redis의 장점은 빠른 속도입니다. 데이터를 메모리에 저장하고 접근하기 때문에, 디스크 기반 데이터베이스 시스템보다 빠른 읽기와 쓰기 성능을 제공합니다. 그러나, 메모리에 데이터를 저장하기 때문에 디바이스를 재부팅하면, 데이터가 다 삭제되므로 백업이 필요합니다.
개념 설명
Redis
Remote Dictionary Server의 약자
싱글 스레드 기반으로 동작
인메모리 기반으로 동작함
NoSQL Key-Value 저장소
Disk I/O 없이 RAM을 사용하기 때문에 빠른 읽기와 쓰기를 제공함
List
redis Strings의 묶음 자료구조
Set
중복되지 않는 값을 데이터로 가지는 Collection
Sorted set(ZSet)
가중치(Score)가 있어 가중치(Score)에 따른 정렬된 순서가 있음
Hash
내부에 또 다른 Key - value로 이루어진 자료구조
캐싱
자주 쓰는 데이터를 Redis에 저장해서 조회 속도를 개선한다
SET,GET,EXPIRE명령어
Pub/Sub 구조
하나의 채널을 구독하고, 특정 이벤트에 발행하는 형태
채팅 시스템, 알림 시스템 등에 사용 가능함
분산 락: 레드락(Redlock) 알고리즘
N개의 단일 레디스 노드들을 이용하여, Quorum 이상의 노드에서 잠금을 획득하면 분산락을 획득한 것으로 판단함
레드락 알고리즘의 한계
Clock Drift: 클럭이 정확한 속도로 동작하지 않는 클럭 드리프트 현상으로 인해 분산락 알고리즘이 깨질 수 있음
애플리케이션 중단 또는 네트워크 지연: 동시성 문제 발생 가능성 있음\
Redis vs Memcached
공통점: 인메모리 캐시 시스템
차이점
redis는 다양한 자료구조를 지원하는 반면, Memcached는 문자열만 지원
영속성 관리: redis는 RDB,AOF 방식으로 디스크에 저장 가능, Memcached는 저장 불가
Pub/sub기능: redis는 지원함, Memcached는 지원 안함
TTL
TTL: Key에 대해 설정할 수 있는 만료 시간
TTL이 지나면 자동으로 삭제됨
만료 처리 방식
Passive expiration: 키에 접근 할때 마다 키의 TTL을 확인, TTL 만료시 키를 제거함
Lazy expiration: 만료 시간을 설정한 키에 접근할 때만 만료 여부를 확인하고, 만료되었다면 그 시점에서 키를 삭제함
Active expiration: Redis 에서 주기적으로 랜덤하게 DB를 스캔, 만료된 키를 제거함
Periodic Scans: 주기적으로 백그라운드 스레드에서 만료된 키를 찾아 삭제함
Eviction policies: 메모리 사용량이 설정된 한계에 도달하면, eviction 정책을 사용하여 키들을 제거함
추가 질문
Redis의 TTL 설정을 하는 방식은?
Redis는 싱글스레드 기반인데 왜 빠른가요?
Memcached와 Redis 차이점은?
redis를 캐시로 사용할 때 발생할 수 있는 장애는 어떤 것이 있나요?
해결방안은?
Last updated