공부하는 블로그

Redis | Redis Introduction 본문

NoSQL/Redis

Redis | Redis Introduction

치킨닮은닭 2020. 9. 23. 23:51

Redis?

 레디스(Redis)는 Remote Dictionary Server의 약자로 Key/Value 형식의 in-memory 데이터베이스로 비관계형 데이터베이스인 NoSQL에 속한다. 디스크가 아닌 메모리에 데이터를 저장하므로 빠른 Read와 Write 속도를 보장해준다.

 

 레디스의 다른 장점으로는 다른 in-memory 데이터베이스인 Memcached와는 다르게 String, List, Set, Sorted Set, Hash 등 다양한 자료구조를 지원한다. 보통 키는 prefix를 지정해서 저장하며 지원되는 자료구조 중 String과 Sorted Set을 많이 사용한다.

 

 또한, Master-Slave 형태의 구성이 가능하여 데이터의 분실 위험을 없애주며 Snapshot 기능을 제공하여 메모리의 내용을 해당 시점으로 복구할 수 있다. 


※Master-Slave

 

 Master-Slave는 데이터의 고가용성을 위한 Database Architecture로 특징은 다음과 같다.

 

1. Master는 Read/Write가 가능하나 거의 Write 전용으로 사용되고 Slave는 Read만 가능하다.

2. 하나의 Master에는 여러 개의 Slave가 존재할 수 있으며, Master의 변경사항이 생기면 Slave에 전달된다.(Replication)

3. 만일 Master의 서버가 죽어버리게 된다면 자동으로 Slave들 중 하나가 Matser로 선출되어 Master의 기능을 대신함으로써 백업기능을 수행한다.


 레디스의 메인 Thread는 Multi가 아닌 Single Thread로 운영된다. 그러므로 모든 데이터를 조회하는 KEYS *, FLUSHALL과 같은 처리 시간이 오래걸리는 명령은 피해주어야 한다. 

Redis 등장 배경

 서비스가 커지면서 필연적으로 발생하게 되는 과도한 DB 연결과 방대해지는 DB의 사이즈로 인해 발생하는 성능 저하를 극복하기 위해 캐시(Cache)를 사용한다.  캐시는 휘발성 데이터로 용량이 크진 않지만 데이터를 읽고 쓰는 속도가 굉장히 빠르므로 자주 요청되는 데이터만을 저장하여 활용한다. 

 

 파레토의 법칙에 따르면 전체 요청의 80%는 고작 20%의 사용자에 의해 발생하게 된다. 즉, 대부분의 요청은 적은 수의 사용자에 의해 발생하는 비슷비슷한 내용일 것이다. 따라서 이러한 요청들을 캐시로 저장하여 빠르게 읽고 쓸 수 있다면 좋은 성능의 어플리케이션을 제공할 수 있게 된다. 

 

 이러한 이유로 고가용성 in-memory 데이터베이스인 레디스가 등장하게 되었다.

Redis Collection

1. String

 가장 단순한 key-value 매핑 구조이다. 

 

2. List

 Linked List와 같은 형태로 처음과 끝에 데이터를 저장하거나 조회할 때 동일한 시간이 소요된다. LPUSH, RPUSH, LPOP, RPOP 명령어를 통해 List 형식으로 레디스 자료구조를 사용할 수 있다. 

 

3. Set

 Set은 중복된 데이터가 없는 문자열의 모음이다. 데이터의 중복체크용이나 SADD, SMEMBERS, SISMEMBER 명령어를 사용한다.

 

4. Sorted Set

 중복된 데이터가 없고 Score를 기준으로 정렬된 레디스 자료구조이다. 정렬 기능을 활용하여 유저의 랭킹 보드에 많이 사용된다.

 

5. Hash

 field-value 쌍의 hash 형태로 데이터를 저장한다. HGET, HSET  명령어를 사용한다.


References

- Redis 공식 document : redis.io/topics/introduction

- [우아한테크세미나] 우아한 레디스 by 강대명님 : www.youtube.com/watch?v=mPB2CZiAkKM

- 개발자를 위한 레디스 튜토리얼 01 : medium.com/garimoo/%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A5%BC-%EC%9C%84%ED%95%9C-%EB%A0%88%EB%94%94%EC%8A%A4-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC-01-92aaa24ca8cc

- Primary-Second 데이터베이스 아키텍쳐 : blog.naver.com/PostView.nhn?blogId=sehyunfa&logNo=221965081270&categoryNo=0&parentCategoryNo=0&viewDate=&currentPage=1&postListTopCurrentPage=1&from=postView

Comments