위와 같은 이유 때문에 데이터 유실로 인한 피해가 다른 데이터에 비해 적다.
예를 들어 세션 스토리지의 데이터가 유실되었다 하더라도 유저는 재 로그인만 하면 된다.
따라서 세션 스토리지는 In-memory가 적합하다.
In-memory 환경의 세션 db를 사용한다면 Redis
와 Memcached
가 자주 언급 되는데
두 가지 모두 key-value
형태로 데이터를 저장하는 방식을 사용하고 있기 때문이다.
key-value
의 형태로 인해 RDBMS 같은 복잡한 연산은 지원하지 않지만 단순 작업에 있어서는 빠른처리가 가능.
Redis
는 Replication
지원을 하기 때문에 Memcached
보다 쉽게 데이터를 복구가 가능하다.
반면에 Memcached
의 Consistent Hashing
이란, 데이터를 노드의 수에 따라 균등하게 분배하고 저장한다. 즉 장애 발생시 하나의 서버만 데이터가 유실되며 나머지 서버는 데이터를 그대로 유지한채 운영이 가능하다.
응답 속도에서의 차이
Redis는 jemalloc
이라는 알고리즘으로 malloc과 free를 통해 메모리 할당을 한다.
반면에 Memcached는 slab 할당자를 이용해 내부적으로는 메모리를 재할당을 하지 않고 관리하는 형태를 취한다.
이 차이로인해 Redis는 메모리 파편화가 발생하고 이러한 할당 비용으로 인해 응답 속도가 상대적으로 느려진다. (하지만 매우 드문 현상)
Redis의 다양한 자료구조 지원
Redis는 싱글 스레드, Memcached는 멀티스레드
해당 논문을 보면 write보다 read 연산에서 redis가 좋은 성능을 갖는 것을 알 수 있다.