코딩못하는사람

Redis란? (우아한 Redis 강연) 본문

C.S 지식정리

Redis란? (우아한 Redis 강연)

공부절대안함 2021. 7. 31. 18:28

Redis (Remote Dictionary Server)란?

보통 Remote에 있는 In-Memory Data Structure Store (인 메모리 데이터 구조)를 가진 key-value 구조 데이터 관리 시스템이다.

보통 DB는 하드 디스크나 SSD에 저장하여 디스크를 돌며 원하는 자료를 찾기 때문에 상대적으로 많은 시간이 소요된다.하지만 Redis는 메모리(RAM)에 데이터를 저장하기 때문에 용량은 적지만 디스크 스캐닝, 쿼리 없이 데이터를 빠르게 가져올 수 있다.

 

Redis는 크게 String, Set ,Sorted Set, Hash,List 자료구조를 지원한다. 이러한 자료구조를 어플리케이션에 잘 맞춰 활용하면 좋은 성능을 낼 수 있다.

 

Cache란?

Cache는 나중에 요청올 결과를 미리 저장해두었다가 빠르게 서비스를 해주는 것을 의미한다.(미리 저장해 두었다가 필요할때 제공한다) ex)팩토리얼 and 다이나믹 프로그래밍(DP)

 

추상적인 웹서비스 구조

파레토의 법칙-전체 요청의 80%는 20%의 사용자

파레토의 법칙에 의하여 Cache가 효율적이다는 것을 알 수 있음.

 

일반적 Cache 구조1-Look aside Cache

Cache 구조2-Write Back

쓰기가 굉장히 빈번할 때 사용하는 구조. 우선 Cache에 저장했다가 일정 시간마다 DB에 저장해줌(Batch)

왜? Insert쿼리를 1번씩 500번 날리는 것보다 500개를 붙혀서 한번에 날리는 것이 훨씬 빠르기 때문에

 

Memcached 와 Redis는 둘다 Cache에 많이 사용되지만 Redis는 Collection을 제공한다.

Collection의 장점

1.개발 편의성이 높아진다.

랭킹서버를 구현한다고 가정해보자.

일반적인 DB라면 order by를 통하여 정렬시킨 값을 가져와야한다. 하지만 결국 개수가 많아지면 디스크를 사용하기 때문에 속도 문제가 발생하게 된다.

여기서 Redis의 Sorted Set을 통하여 쉽게 구현 할 수 있다. (복제도 가능함)

 

2. 개발의 난이도가 낮아진다.

DB에서 트랜잭션이 동시에 수행되서 잘못된 데이터가 덮어지는 Race Condition이 일어날 수 있다.

하지만 Redis는 싱글 스레드이기 때문에 Atomic 하여 Race Condition을 피할 수 있다.(그래도 잘못짜면 발생한다)

 

따라서 우리는 외부의 Collection 을 잘 이용하기만 하면 되므로 우리는 비즈니스 로직에만 집중할 수 있다.

 

Collection 사용시 주의 사항

-하나의 컬렉션에 너무 많은 아이템을 담으면 비효율적이다. 10000개 이하 몇천개 수준이 좋다

-Expire는 Collection의 개별 item에 걸리지 않고 전체 Collection에만 걸려서 모두 삭제될 위험이 있다.

 

Redis 를 어디서 사용할까?

  • 인증 토큰 등을 저장(Strings or hash)
  • Ranking 보드로 사용(Sorted Set)
  • 유저 API Limit
  • 잡 큐(list)

Redis 운영시 중요사항

1. 메모리 관리를 잘하자

메모리 파편화 때문에 Max Memory 설정을 하여도 그 메모리 보다 더 많은 공간을 사용하게 된다.

따라서 다양한 사이즈를 가지는 데이터 보다는 유사한 크기의 데이터를 가지는 경우가 좋고, 큰 메모리 인스턴스 하나보다는 적은 메모리 인스턴스 여러개가 안전하다.

ex) 24GB 하나보다 8GB*3이 유리하다는 의미

 

2.O(N) 관련 명령어는 주의하자

Redis는 싱글 스레드이므로  Buffer에 쌓인 요청을 하나씩 빠르게 처리해야 한다. 따라서 처리 하는데 시간이 오래걸리는 요청이 온다면 뒤에 쌓인 요청들은 모두 대기해야 하므로 O(N) 관련 명령어는 피해야 한다.

대표적인 O(N) 명령어에는

KEYS,FLUSHALL,FLUSDB, Delete Collections,Get All Collections 등이 있다.

 

추가적으로 Replication 및 권장 설정, 데이터 분산 Failover 등을 자세하게 공부하고 싶고 강연을 한번 듣고 싶다면 우아한 Tech youtube에 들어가서 한번 보는 것을 추천한다.

 

느낀점

새로 진행중인 프로젝트에서 활동 내역에 따른 point를 부여하는 기능이 있는데 Redis로 sorted set을 통하여 랭킹 서버를 구현해서 Redis를 실제 적용까지 해봐야겠다.

 

참고 및 공부한 곳

유튜브 강연 https://www.youtube.com/watch?v=mPB2CZiAkKM&t=3610s 

ppt 자료 https://www.slideshare.net/charsyam2/redis-196314086

 

 

'C.S 지식정리' 카테고리의 다른 글

NoSQL이란  (0) 2021.12.22
nginx로 로드밸런싱 해보기  (0) 2021.09.10
유스케이스 다이어그램  (2) 2021.04.29
[UML] 클래스 다이어그램  (0) 2021.04.29
서버 성능 테스트/ jmeter  (0) 2021.04.18
Comments