본문 바로가기
네트워크, 서버/데이터베이스

(NoSQL)Redis

by 흥부와놀자 2021. 7. 26.

레디스란?

- key-value 형식의 NoSQL이다.

 

이걸 어디에 쓰나?

- 원격저장소, 메시지 브로커, 공유 메모리 등으로 사용된다. 보통 인메모리 기반이기에 데이터를 캐싱하는 데에 많이 쓴다고 한다.

 

레디스의 특징

- value값으로 String, Set, SortedSet, Hash 등 여러 데이터 형식을 지원한다. 

- SnapShot(특정 지점을 Disk에 백업하는 방식), AOf(모든 쓰기 연산을 log에 기록해서 기존의 명령어들을 재실행하여 복구)를 이용하여 메모리에서 삭제된 데이터 복구가 가능하다.

-  Replication(Master / Slave)이 가능하다. 해당 Redis인스턴스가 다운됬을때를 대비할수 있다.

- 싱글 스레드 기반이기에 RaceCondition이 일어날리가 없다. 

 

캐싱 방식

1. LookAsideCache

- 읽기가 빈번할때 사용하는 방식으로 서버가 데이터를 가져올때 DB가 아닌 Redis Dictionary를 먼저 확인해서 캐싱된 데이터가 있으면 거기서 가져오고 없을때 DB에서 가져오는 방식이다.

디스크와의 통신과 인메모리 통신의 속도가 약 1000배 차이가 난다고 하니 정말 괜찮은 방법인것 같다. 

 

Look aside Cache

 

2. Writeback

- 쓰기가 빈번할때 사용하는 방식으로 먼저 레디스에 데이터를 캐싱하고 일정 주기에 캐싱된 데이터를 DB에 저장하는 방식이다. 물론 캐싱된 데이터가 날아가는 상황이 생길수 있다. 그래서 미리미리 SnapShot이나 AOF를 통해 데이터 백업방식을 마련해 둬야 할것 같다.  

 

writeBack

 

주의사항

- 싱글스레드 기반이기에 O(N)이상의 연산의 경우 다음 작업이 많이 늦어질수 있어서 조심해야한다.

   ->keys, flushAll, flushDB, DeleteCollections, GetAllCollections 같은 명령어 주의!!

   ->컬렉션 일부만 가져오거나 나눠서 가져와야한다.

- 아무래도 디스크에 비해 용량이 작은 메모리 기반이다 보니 메모리 관리가 중요하다. 만약 실제 메모리 이상을 사용하면 메모리와 디스크의 swap이 일어나서 느려진다고 한다. 그러니 넉넉히 써야한다. 찾아보니 MAX MEMORY를 설정할수 있고 그이상 쓰면 에러를 뱉게 하거나 LRU 알고리즘 기반으로 키를 삭제하거나 특정 키들을 정리 할수 있다고 한다.