DB

[Redis] Redis 알아보기

개발하는고양이 2024. 2. 5. 10:08
반응형

Redis를 안다고 생각했지만 프로젝트에서 토큰 관리를 할때 뭐가 뭔지 모르겠더라..

사실 제대로 모르는듯.. 그래서 정리해보려고 한다.

Redis

Remote Dictionary Server 의 약자이다.

dictionary (key-value)구조로 데이터를 저장하고 관리하는 서버를 의미한다.

레디스의 특징은 다음과 같다.

속도

레디스는 모든 데이터를 메모리에 저장하기 때문에 데이터 조회가 매우 빠르다.

즉 인메모리 구조이다.

 

위로 갈수록 속도가 빠르고 용량은 작다.

인메모리란 컴퓨터 주기억 장치 RAM 에 데이터를 올리는 방법이다.

컴퓨터 내부에서 처리가 되므로 하드 디스크를 거치지 않아도돼서 속도가빠르다.

하지만 용량은 작아서 데이터 유실이 발생할 가능성이 있다. 또한 휘발성이기 때문에 중요한 데이터를 담는 용도로는 부적절하다.

 

물론 레디스에서도 영속적으로 저장하는 방식이 있다.

 

Redis Pesistence

메모리에 저장되어 있는 데이터를 디스크로 백업하는 기능이다.

 

AOF

입력, 수정, 삭제가 실행 될 때마다 로그파일에 저장.

서버가 재부팅될때 로그 파일의 기록된 데이터를 실행한다.

하지만 시간이 지날수록 로그 파일의 크기가 매우 커지는것이 단점..

 

RDB

 

메모리에 있는 데이터를 그대로 압축하여 스냅샷을 찍어 디스크에 저장하는 방식이다.

시스템 관리자가 지정한 시간의 백업을 진행하므로 실시간 데이터 백업은 어렵다.

또한 데이터를 백업하는 과정 중에 서버가 다운되면 데이터는 사라지기 때문에 데이터 손실 가능성이 있다.

 

정리하자면,

aof 는 데이터 손실을 최소화 할 경우 사용, rdb는 데이터 손실이 발생해도 될 경우 사용하면된다.

2가지를 합쳐서 사용해도된다. RDB는 주기적으로 백업하여 이 백업 기준으로 aof를 초기화하면 더 효율적이다.

다양한 자료구조

cache와 비슷해보이지만 redis는 다양한 자료구조를 갖는다.

 다양한 자료구조를 지원함으로써 개발이 편해지고 쉬워진다(난 아직 쉽진 않던데) 는 장점을 가진다.

예를 들어 학생의 이름과 점수 컬럼을 가지는 데이터가 있다고 해보자.

점수를 정렬하여 조회하고 싶을때, dbms는 

1. 데이터를 저장한다.

2. 저장된 데이터를 정렬한다.

3. 읽어온다. (디스크에 직접 접근)

 

반면에 레디스는 Sorted-Set 이라는 자료구조를 사용하면

정렬된 채로 저장이 되므로 빠르다.

 

Transaction

레디스의 트랜잭션은 명령어들을 큐에 모아두고 한번에 처리한다.

RDB의 트랜잭션은 작업이 완전히 실행 또는 완전히 실패 (rollback) 하는 원자성을 가진다.

반면 레디스는 롤백을 지원하지 않아 원자성이 없다. 즉, 중간에 실패하더라도 성공한 명령들은 모두 실행된다.

 

왜 롤백이 지원되지않는걸까?

그 이유는 레디스는 싱글 스레드로 동작하기 때문이다. 여러 요청을 동시에 처리하지 못하지만 빠른 속도로 처리하여 동시성을 보장하려 한다.

하나의 스레드에 하나의 명령어를 처리하므로 다른 요청이 들어오지 않는다. 그렇기 때문에 롤백이라는 개념이 없는듯..

Redis는 어떤 용도로 쓰는게 좋을까?

메인 디비보다는 캐시를 담는 디비 서버로 사용하는 것이 좋다.

1. 인증 토큰 저장 (String, hash)

2. Ranking (Sorted Set)

3. API limit

4. Job Queue

 

다음은 refresh token을 redis에 저장하는 방법을 정리해봐야겠다,,,,

참고

https://server-talk.tistory.com/489

https://devlog-wjdrbs96.tistory.com/374

https://velog.io/@hope1213/Redis%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C

반응형

'DB' 카테고리의 다른 글

Database  (0) 2023.11.01