[Redis] Redis란?

0cean·2024년 3월 13일

프로그래밍

목록 보기
5/5
post-thumbnail

프로젝트 진행 중 Redis를 사용해야 할 것 같아서 관련 테코톡과 참고자료들을 학습한 내용을 바탕으로 Redis에 대해 정리해보고자 한다.

Remote Dictionary Server

사전적인 뜻으로 외부에 사전 형태로 저장하는 서버라는 뜻이다.

사전 형태

사전 형태란 Key-Value 구조를 의미하고 Java에서 흔히 사용하는 HashMap과 매우 흡사한 구조를 가지고 있다.
사전 형태 예시로 직업을 들면 다음 표와 같이 된다.

keyvalue
0cean개발자
김태환학생

간단 설명

즉 Redis는 메모리에 저장하는 Key-Value 구조dls No-Sql DBMS이다.

사용 용도

Redis는 주로 캐시를 구현하는데 사용되고 그 외에 임시작업 큐, 실시간 채팅등 다양한 용도로 사용된다.

Redis의 특징

  1. 성능
    모든 Redis 데이터는 메모리에 저장되어 대기 시간을 낮추고 처리량을 높인다.
    평균적으로 읽기 및 쓰기의 작업 속도가 1ms로 매우 빠른속도를 가지고 있다.

  2. 유연한 데이터 구조
    Redis의 데이터는 String, List, Set, Hash, Sorted Set, Bitmap, JSON 등 다양한 데이터 타입을 지원한다.
    따라서, 애플리케이션의 요구 사항에 알맞은 다양한 데이터 타입을 활용할 수 있다.

  3. 개발 용이성
    Redis는 쿼리문이 필요로 하지 않으며, 단순한 명령 구조로 데이터의 저장, 조회 등이 가능하다. 또한, 다수의 언어를 지원하여 접근성도 좋다

  4. 영속성
    Redis는 영속성을 보장하기 위해 데이터를 디스크에 저장할 수 있다. 서버에 치명적인 문제가 발생하더라도 디스크에 저장된 데이터를 통해 복구가 가능하다. 해당 특징을 대표하는 방식은 RDB와 AOF가 있다.

  5. 싱글 스레드 방식
    Redis는 싱글 스레드 방식을 사용하여 한 번에 하나의 명령어만을 처리한다. 따라서 연산을 원자적으로 처리하여 Race Condition(경쟁 상태)가 거의 발생하지 않는다.
    하지만, 멀티 스레드를 지원하지 않기 때문에 시간 복잡도가 O(n)인 명령어의 사용은 주의해서 사용해야 한다.

사용시 주의점

  1. 메모리 관리
    Redis는 인메모리 데이터 스토어이기 때문에 메모리 관리가 필수적이다. 하지만 메모리 특성상 메모리 단편화가 발생한다. 즉 사용가능한 메모리임에도 불구하고 메모리를 할당해주지 못하는 상황이 발생한다. 즉 Redis를 사용할 땐 실제 물리 메모리 사용량을 모니터링을 해야할 필요가 있다.

  2. 목적을 정확하게 구분해야 한다.
    캐시용으로 사용할 것인지, 메모리용으로 사용할 것인지 정확하게 선택하고 사용하여야 한다. 앞서 작성했던 특징 중 영속성의 특징을 사용하는데 Redis는 많은 오류가 발생한다. 즉 영속성 기능을 사용하다 데이터가 유실되도 치명적이지 않은지, 또는 일부값이 사라져도 치명적이지 않은지, 어떤 데이터가 캐시의 대상인지 같은 목적을 확실히 해야한다.

마무리

그동안 Redis라는 기술을 듣기만 했지, 사이드 프로젝트에선 사용할 일이 없을 줄 알았는데, 사용해보게 되어서 기분이 좋다. 하지만, 너무나도 방대한 내용인 것같아 추가적인 학습이 필요할 것 같다. 무작정 Redis를 사용해서 최근 검색어 같은 기능을 구현하자고 생각하니 앞뒤가 맞지 않은것 같다. 왜 Redis를 다들 사용하는지 한번더 학습해보고 정리 해봐야할것 같다,

참고자료

https://www.youtube.com/watch?v=tVZ15cCRAyE
https://velog.io/@inhwa1025/Redis-Redis%EB%9E%80-Redis%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-%ED%8A%B9%EC%A7%95

profile
주도적인 학습으로 성장하는 개발자가 되겠습니다

0개의 댓글