Redis에 대해서 간단히 설명해주세요

면접용 답변

redis는 키-값 형태로 저장하는 nosql 데이터베이스입니다. redis는 문자열, 해시, 리스트, 셋, 정렬된 셋 등 다양한 데이터 구조를 지원하며, 캐싱, 메시지 브로커, 큐, 세션 관리에서 사용될 수 있습니다. 그중에서 주로 캐시 서버를 구현할 때 많이 사용합니다.

redis의 장점은 빠른 속도입니다. 데이터를 메모리에 저장하고 접근하기 때문에, 디스크 기반 데이터베이스 시스템보다 빠른 읽기와 쓰기 성능을 제공합니다. 그러나, 메모리에 데이터를 저장하기 때문에 디바이스를 재부팅하면, 데이터가 다 삭제되므로 백업이 필요합니다.

개념 설명

Redis

  • Remote Dictionary Server의 약자

  • 싱글 스레드 기반으로 동작

  • 인메모리 기반으로 동작함

  • NoSQL Key-Value 저장소

  • Disk I/O 없이 RAM을 사용하기 때문에 빠른 읽기와 쓰기를 제공함

String
기본적인 key-value

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