Redis의 문제점 (주의해야 할 점)
그러나 Redis에도 설계 구조상 단점이 존재한다.
시간 복잡도
레디스는 자바스크립트와 같이 싱글 쓰레드 기반으로 돌아간다.
그래서 한 번에 딱 하나의 명령어만 실행하기 때문에, 긴 처리시간이 필요한 명령어를 쓰면 불리하고 요청 건을 처리하기 전까지 다른 서비스 요청을 받아들일 수 없고 서버가 다운 되는 현상이 일어날 수 있다.
따라서 전체 데이터를 다루는 시간복잡도를 가진 O(N) 명령어 keys, flush, getall 는 주의해서 사용할 필요가 있다.
대표적인 O(N) 명령 및 사례
- KEYS, FLUSHALL, FLUSHDB, Delete COLLECTIONS, Get All Collections
- 모니터링 스크립트가 일초에 한번씩 keys 호출
- 큰 컬렉션의 데이터를 다 가져오는 경우
- Access Token 저장을 (List(O(N)) 자료구조를 통해서 이루어짐 -> 삭제시에 모든 item을 찾아봐야 함, 최근에는
Set을 통해 가져오도록 패치됨
- Keys는 scan 명령어로 사용하는 것으로 하나의 긴명령을 짧은 여러 명령으로 변경 가능
메모리 파편화
메모리를 할당 받고 해제 하는 과정에서 아래 그림과 같이 부분부분 빈 공간이 생기게 되는데, 4번같이 새로운 메모리를 할당할 때 알맞는 공간(4칸)이 없기 때문에 마지막부분(우측) 부분에 프로세스가 위채해야 되고, 그러면 빈 공간 메모리가 남아 낭비가 발생하게 된다.
그리고 이 현상이 계속되면 실제 physical 메모리가 커져 프로세스가 죽는 현상이 발생할 수도 있다.
또한 쓰기 연산이 copy on write 방식으로 동작하기 때문에 최대 메모리를 2배 이상까지 사용하기도 한다.
그래서 redis를 사용할 때 메모리를 적당히 여유있게 사용하는 것이 좋다.
Reference
https://redis.com/nosql/key-value-databases/
https://chs96.github.io/데이터베이스/Redis란/
https://sehajyang.github.io/2019/12/11/how-to-operate-redis/
https://medium.com/garimoo/개발자를-위한-레디스-튜토리얼-01-92aaa24ca8cc
'Study > DB' 카테고리의 다른 글
[DB] 데이터베이스 기초 개념 (0) | 2023.02.08 |
---|---|
[Redis] Redis(레디스) 자료구조 (0) | 2023.02.05 |
[DBMS] Redis(레디스)란? - 5 (0) | 2023.01.21 |
[DBMS] Redis(레디스)란? - 4 (0) | 2023.01.19 |
[DBMS] Redis(레디스)란? - 3 (0) | 2023.01.19 |