기업 우대 조건이나 대기업들의 Tech 블로그를 보면 Redis에 대해 종종 다룬다. 도대체 무엇이길래 다들 다루는거지 궁금해서 공부를 하며 정리하여 담아보려한다.
우리는 이미 Mysql, oracle, MongoDB 등 다양하고 안전한 데이터베이스를 가지고 있습니다. 그런데 왜 쓸까?
우리가 흔히 생각하는 DB들은 우리가 알고 있는 DISK(HDD,SDD)에 저장하고 그 곳에서 CRUD들이 일어난다.
우리는 하지만 DISK 말고도 빠르게 접근 할 수 있는 RAM을 알고 있고 활용할 수 있다.
그것을 이용한 데이터베이스를 인메모리 DB라 부르며 Redis도 그 중 하나이다.
RAM은 접근이 빠르며, 우리는 주로 Cache메모리로 쓴다. 그렇기에 서버까지 갈 필요없이 Cache에 저장하고 우리가 빠르게 필요할 때 쓰는 것이다. 그러면 단점은 없는 것인가?
- 비싸다.(RAM은 우리가 생각하는 디스크에 많이비싸다.(즉 크기에 한계가 있다)
- 서버에 저장하지 않으므로 에러가 생기면 데이터가 날아간다.
KEY, Value의 형태의 자료구조를 생각해보면 dic, hashtable을 생각할 수 있다. 아래와 같이 다양한 형태의 데이터 형태를 지원한다.
- 문자열(string)
- 해시(hashes)
- 리스트(list)
- 집합(sets)
- 정렬된 집합(sorted sets)
- 비트맵(bitmap)
- 하이퍼로그 로그(hyperloglog)
- 지리공간 인덱스(geospatial indexes)
- 스트림(streams)
굳이 우리가 Sort를 조건문에 걸지않아도 괜찮은 점 등 다양한 장점들이 된다.
- 비싸고 용량의 제한이 있다.
- 메모리의 한계를 극복하기 위해, SWAP이라는 DISK의 자리를 떼어서 쓰는 것인데 이 과정은 레이턴시가 크다
- redis는 메모리에 어느 정도 쓸지 미리 할당을 한다. 그런데 만약 개발하고 나니 적게 쓰면 우리는 메모리를 헛되게 쓰고 있는 상황이 연출될 수도 있다. 즉 개발자가 고려해야할 조건이 많아진다.
- 싱글 스레드이다.
- 싱글 스레드이기 때문에 O(N)같이 처리속도가 오래 걸리는 처리는 안쓰도록 유의 해야한다.
그럼에도 불구하고 높은 처리 속도를 보여주기에 대부분 기존에 있던 DB와 함께 Redis를 활용한다. 특히 자주 쓰는 데이터 및 자주 바뀌는 데이터들은 Cache에 Redis를 활용하면 매우 이점이 크다고 한다. 그래서 다들 쓰는거 같습니다. 추가적으로 sort와 set같은 자료 구조를 쓸 수 있으니 최근 검색어, 순위 매기는 데이터들을 저장하기 좋다고 합니다.