대표적인 In memory databaseRedis 에 대해서 정리하고, 유사한 기능을 하는 Memcached 와 비교를 해보았다.


About Redis


Redis의 사전적인 의미는 다음과 같다.


Redis (/ˈrɛdɪs/;[6][7] Remote Dictionary Server)[6] is an in-memory data 
structure project implementing a distributed, in-memory key-value database 
with optional durability.

출처 : https://en.wikipedia.org/wiki/Redis


이렇듯, Redis는 Key-value 기반의 대표적인 In memory database 이다.


Redis가 제공하는 데이터 구조(Collection)


  1. Strings
  2. Lists
  3. Sets
  4. Sorted Sets
  5. Hashes
  6. Stream
  7. HyperLogLogs(Redis 2.8.9 이상)
  8. geohash(Redis 3.2 이상)


Redis 활용


  • 다양한 데이터 구조를 제공하기 때문에 활용도 역시 다양하지만, 대표적으로 세션 캐싱 등의 캐시 데이터 저장, 메시지 큐 응용프로그램, 리더 보드 등에 주로 사용되고 있다.


Redis 특징


Redis의 대표적인 특징은 Single thread 이며, In memory database 이지만, 영속적인 데이터 보존이 가능하다는 점이다.

  • Single threaded
    • 서버 하나에 여러개의 서버를 띄울 수 있다.
    • Replication (Master-Slave) 및 Cluster 구성이 가능하다.
    • 실시간으로 데이터를 다른 서버로 복제하는 copy-on-write 방식이다.
    • 명령어를 포함한 Packet이 MTU(Maximum Trasmission Unit) 보다 크면 Packet이 쪼개져서 오고, 처리하는데 오래 걸릴 수도 있다.
    • 메모리 파편이 일어 날 확률이 높으며, 메모리 사용이 2배 가량 된다.


  • 메모리를 활용하여 영속적인 데이터 보존 가능
    • Expires 를 설정하지 않으면 데이터 삭제 되지 않는다.
    • 디스크에 데이터를 기록하기 때문에 데이터 복구 가능하다.
    • 스냅샷 기능을 이용하여 해당 시점으로 복구 가능하다. (*.rdb 파일)


Redis vs Memcached


상대적으로 최신에 나온 Redis는 비슷한 기능을 하는 Memcacehd와 비교가 자주 되고 있다.

Redis - Memcached 유사한 특징


  • Redis와 Memcached 모두 메모리 내 key-value 저장소로 사용
  • NoSQL 데이터 관리 솔루션 제품군에 속하며 key-value 데이터 모델을 기반
  • 모든 데이터를 RAM에 보관하므로 캐싱 계층으로 매우 유용
  • 성능 측면에서 데이터 처리량 및 대기 시간과 거의 동일한 특성 및 메트릭


Redis - Memcached 비교


구분 Memcached Redis
데이터 저장 메모리에만 저장 메모리 및 디스크에 저장
데이터 복구 불가능 *.rdb 파일로 복구 가능
데이터 타입 String String Set, Hash, List…
메모리 재사용 저장소 메모리를 재사용 메모리 없을 시
LRU 알고리즘에 따라 데이터는 사라짐
저장소 메모리 재사용x
명시적으로만 데이터 제거 가능



이렇듯, 비슷하면서도 Redis가 가진 장점들이 많기 때문에, 특별한 상황이 아닌 이상 Memcached 보다는 Redis를 선택하는 것이 항상 더 좋은 선택이다.



하지만, 작고 변하지 않는 데이터인 HTML 코드의 부분을 캐싱할 때 등 메타 데이터를 처리할 때는 Memcached가 비교적 작은 메모리를 사용하기 때문에 주로 사용한다.


Reference


Redis 기본정리
Why Redis beats Memcached for caching