Redis vs memcached

불타는강정·2022년 10월 16일
0

공부한 영상 👍

자료 구조 차이

  • string: memcheched, redis
  • collections: redis
  • CAS: memcheched
  • replication: redis
  • cluster: redis
  • ACL: redis

collections -> 개발의 난이도가 달라짐

  • memcached는 key-value만 지원한다
  • key에 여러 값을 저장하고 싶은데 동시에 트렌젝션이 돌면 race condition이 생김
  • 이런 문제를 해결하기 위해 CAS(Compare And Swap) 제공
  • Redis는 그냥 Hash나 Set에 저장하면 된다

메모리 관리 정책

memcached

  • slab algorithm
  • 메모리 pool과 비슷
  • slab 단위로 메모리를 잘라놓음
  • 요청 단위의 slab에서 가져감
  • linked list처럼 되어 있다
  • 다 쓰고 돌려놓음
  • key + item 합쳐서 구성
  • key + item 사이즈가 1MB를 넘지 못한다

redis

  • malloc에 전적으로 맡김
  • Jemalloc의 성능이 좋은 편
  • 메모리 할당이 빠르지 않고 비균일하다
  • key, item 따로 할당한다

동기화 측면

  • 많은 트래픽을 잘 처리하기 위해서 서버의 리소스를 잘 사용해야 하고, 여러 코어를 잘 이용하기 위해서 Multi-Thread의 사용이 필요
  • Lock을 어떻게 하느냐

redis

  • redis는 기본적으로 Single Threaded이다
  • 기본적으로 Lock이 필요 없다
  • 그런데 왜이리 빠를까
  • 빠른 자료구조 사용 (HashTable O(1))
  • 기본적으로 Atomic하다
  • Multi Thread를 쓰기는 한다
  • 데이터 Write는 Main Thread에서만 처리 (동기화 필요 없음)
  • 네트워크 패킷을 읽고 전송하는 부분에서만 사용

memcached

  • Multi Thread로 동작
  • Lock striping 이용
  • key를 해싱하고 -> 비트마스크해서 lock을 건다
  • CAS(Compare And Swap)
  • CAS: AJFXL TMFPEMDPTJ Locking 없이 Atomic을 보장하기 위한 방법
  • 이전 값과 현재 값이 동일하면 업데이트 한다
  • memcached는 CAS의 컨셉을 가져왔다
profile
대충살자

0개의 댓글

관련 채용 정보