Redis

JuhyeokLee·2022년 7월 24일
post-thumbnail

Redis란?

메모리를 사용하는 키-값 인메모리 데이터 구조 스토어로 NoSQL이다. RDS나 MongoDB보다도 빠른 속도로 동작한다. database, cache, message broker, streaming engine 등으로 사용되어 진다.

Redis의 사용방식

  • 로컬 환경에서 레디스를 호출하는 방식

    	- AWS EC2 같은 인스턴스에 레디스를 설치하여 내부 메모리를 사용하는 방식
  • 클라우드 서비스를 사용하여 외부 자원을 이용하는 방식

Redis를 사용하는 곳

  • 많은 양의 I/O 작업을 발생하는 곳에 캐싱 처리가 필요한 경우
    - Ex) 세션 관리
  • 빠른 속도로 데이터를 조회해야 하는 곳
    - Ex) 랭킹

Redis가 제공하는 데이터구조

  • String
  • Hash
  • List
  • Set
  • sorted Set

Redis의 Key 설계방식

일반적으로 Redis의 Key는 :으로 구분자를 만들어 사용하며 키를 길고 깊게 만들어도 검색 속도는 항상 O(1)이다.

mysql> select * from login;
+---------+----------------+-------------+---------------------+
| user_id | name           | login_times | last_login_time     |
+---------+----------------+-------------+---------------------+
|       1 | fk             |           5 | 2013-09-26 00:00:00 |
|       2 | zhangsan       |           1 | 2013-09-25 00:00:00 |
|       3 | zhaokuangyin   |           2 | 2013-09-01 00:00:00 |
+---------+----------------+-------------+---------------------

위에 테이블을 Redis에 저장할 경우 테이블이름:userId:저장할컬럼 형식으로 Key를 구성한다.

SET login:1:login_times 5
SET login:2:login_times 1
SET login:3:login_times 2

SET login:1:last_login_time 2013-09-26
SET login:2:last_login_time 2013-09-25
SET login:3:last_login_time 2013-09-01

SET login:1:name "fk"
SET login:2:name "zhangsan"
SET login:3:name "zhaokuangyin"

Redis Persistent

  • 일반적으로 메모리에 데이터를 저장하면 restart할 경우 모든 데이터가 날아간다. 하지만, Redis는 디스크에 저장된 데이터를 기반으로 복구할 수 있다.

    • RDB
      현재 메모리에 대한 스냅샷을 떠서 디스크에 저장한다.(SAVE, BGSAVE) 주기적으로 스냅샷을 저장하기 때문에 즉각적인 수정사항을 반영하긴 힘들다.
      • SAVE : 모든 작업을 멈추고 현재 메모리에 대한 RDB파일을 생성
      • BGSAVE : 백그라운드 SAVE로 fork()명령을 통해서 부모 프로세스로부터 자식 프로세스를 생성하여 현재 메모리가 복제된 상태에서 데이터를 저장한다.
    • AOF
      데이터를 업데이트 (생성, 수정, 삭제) 관련 명령을 요청하면, Redis는 해당 명령을 AOF에 저장하고, 실제 명령을 수행하여 Redis 메모리에 내용을 변경한다. 수정사항을 반영하기 전에 항상 디스크에 추가하기 때문에 항상 최신 데이터이다.
  • 두 방식중에 우월한 방식은 존재하지 않으며 상황에 따라 다르게 사용해야 한다.

참고

profile
성장하는 개발자가 되겠습니다~

0개의 댓글