DBMS/Redis

[Redis] 레디스란 무엇인가?

블로그 주인장 2023. 12. 30.

Redis(Remote Dictionary Server)

Redis는 Remote(원격)에 위치하고 프로세스로 존재하는 In-Memory 기반의 Dictonary(key-value) 구조 데이터 관리 시스템이다.

 

여기서 key-value 구조 데이터란?

mysql과 같은 관계형 데이터가 아닌 비관계형 구조로서 데이터를 그저 '키-값' 형태 로 단순하게 저장하는 구조를 칭한다.

 

그래서 관계형 데이터베이스와 같이 쿼리연산을 하지 않지만, 대신 데이터의 고속 읽기와 쓰기에 최적화 되어있다.

그렇기 때문에, Redis는 일종의 NOSQL 로 분류 되기도 한다.

 

여기서 말하는 NOSQL 이란?

비관계형 데이터베이스로 데이터의 저장 및 검색을 위해 특화된 매커니즘을 제공하는 데이터 저장기술을 의미한다.

단순 검색 및 추가 작업에 있어서 매우 최적화된 키-값 저장 기법을 사용하여 데이터를 효율적으로 처리가 가능하고, 데이터의 분산처리, 빠른 쓰기 및 안정성이 필요할 때 사용한다.

이로 인해 특정 서버에 장애가 발생했을 때도 데이터 유실이나 서비스 중지가 없는 형태의 구조이기에 사용한다.

 

 

Redis의 특징

  • 메모리 기반이라 모든 데이터들을 저장하고 조회에 매우 빠르다. (RDBMS의 대표적인 예시인 MySQL에 비해 10배 정도 빠르다)
  • Redis의 데이터는 String, List, Set, Hash, JSON 등 다양한 데이터 타입을 지원한다.
  • 메모리에 상주하면서 서비스 상황에 따라 데이터베이스로 사용될 수도 있으며, Cache로도 사용될 수 있다.
  • 메모리 기반이지만 Redis는 영속적인 데이터 보존(Persistence)이 가능하다. (기존 메모리 = 휘발성)
  • 쓰기 성능 증대를 위한 클라이언트 측 샤딩(Sharding)을 지원한다.
    • 샤딩(Sharding) : 파티셔닝(Partitioning)과 동일하게 같은 테이블 스키마를 가진 데이터를 다수의 데이터에 분산하여 저장하는 방법을 의미

 

Redis의 처리 방식

Redis는 사용자들이 실행한 명령어들을 이벤트 루프(event loop) 방식으로 처리한다.

즉, 클라이언트가 실행한 명령어들을 Event Queue에 적재하고 싱글 스레드로 하나씩 처리한다.

 

장점

 

멀티 스레드 환경이 아니기에 Context Switch가 발생하지 않는다

그렇기 때문에 효율적인 시스템 리소스 사용이 가능하고 DeadLock 이 발생하지 않는다.

 

단점

 

전체 스캔과 같은 오버헤드가 큰 명령어를 처리하는 동안 다른 명령어 처리가 불가능하다.

이 때, 다른 명령어들은 이벤트 큐에 저장되어 있는 시간이 길어지기에 응답 속도가 저하된다.

시간 복잡도 O(n)인 명령어의 사용은 주의해서 사용해야한다.

 

Redis 주요 사용 용도

  1. 주 데이터 저장소 : AOF, RDB 백업 기능과 레디스 아키텍처를 사용하여 주 저장소로 데이터를 저장할 수 있다. 하지만 메모리 특성상 용량이 큰 데이터 저장소로는 적절하지 않다.
  2. 데이터 캐시 : 인메모리 데이터 저장소이므로 주 저장소의 데이터를 캐시하여 빠르게 데이터를 읽을 수 있다. 캐시된 데이터는 한곳에 저장되는 중앙 집중형 구조로 구성한다. → 데이터 일관성 유지 가능
  3. 분산 락(distributed lock) : 분산 환경에서 여러 시스템이 동시에 데이터를 처리 할 때는 특정 공유 자원의 사용 여부를 검증하여 데드 락을 방지할 필요가 있다. 이때 레디스를 분산 락으로 사용할 수 있다.
  4. 순위 계산 : 레디스에서 제공하는 ZSet(Sorted Set) 자료 구조를 이용하여 순위 계산 용도로 사용하기도 한다. ZSet은 정렬 기능이 포함된 Set 자료 구조이므로 쉽고 빠르게 순위를 계산할 수 있다.

 

Reference

https://jyejye9201.medium.com/%EB%A0%88%EB%94%94%EC%8A%A4-redis-%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80-2b7af75fa818

 

https://ittrue.tistory.com/317

 

https://velog.io/@banggeunho/%EB%A0%88%EB%94%94%EC%8A%A4Redis-%EC%95%8C%EA%B3%A0-%EC%93%B0%EC%9E%90.-%EC%A0%95%EC%9D%98-%EC%A0%80%EC%9E%A5%EB%B0%A9%EC%8B%9D-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%9C%A0%ED%9A%A8-%EA%B8%B0%EA%B0%84

반응형

'DBMS > Redis' 카테고리의 다른 글

[Redis] Redis를 이용한 캐시 활용하기  (0) 2023.12.30

댓글