Redis와 비교하여 memcached는 공룡입니까? [닫은]


185

나는 지난 몇 주 동안 memcached와 꽤 일했고 Redis에 대해 알게되었습니다. 나는 그들의 readme 의이 부분을 읽을 때 갑자기 내 뱃속에 따뜻하고 아늑한 느낌이 들었습니다.

Redis는 memcached만큼 빠르지 만 더 많은 기능을 가지고 있기 때문에 스테로이드에서 memcached로 사용될 수 있습니다. memcached와 마찬가지로 Redis는 키 시간 제한 설정을 지원하므로 지정된 시간이 지나면이 키가 자동으로 제거됩니다.

놀랍습니다. 나는 또한 벤치 마크와 함께이 페이지를 발견했다 : http://www.ruturaj.net/redis-memcached-tokyo-tyrant-mysql-comparison

솔직히 memcache는 Redis라는 새로운 이민자와 비교할 때 성능 관점에서 나쁜 선택 인 오래된 공룡입니까?

이전에 Redis에 대해 많이 들어 본 적이 없으므로 내 질문에 대한 접근 방식입니다!



9
이 ruturaj 벤치 마크는 많은 관심 정말 가치가 없다
dsomnus

2
우리는 직장에서 Membase를 실험하기 시작했으며 지금까지는 행복했습니다. 우리는 Memcache에서 왔기 때문에 대체품을 줄이는
jayshao

2
Redis는 현실적이지 않은 벤치 마크를 위해 memcached만큼 빠릅니다. 그것은 느리다는 것을 암시하는 것이 아닙니다. 대부분의 워크로드에는 충분히 빠르지 만 memcached보다 빠른 것은 memcached의 버그 만 나타냅니다. 거의 항상 하드웨어 나 열악한 응용 프로그램 디자인으로 인해 병목 현상이 발생합니다.
더스틴

4
나는 SO 순찰의 신성함이 적절하지 않고 도움이되지 않는 것으로이 질문을 마무리하지 않은 것에 놀랐다.
Dogweather

답변:


74

Memcache는 여전히 뛰어난 도구이며 매우 신뢰할 수 있습니다.

<100ms 범위에서 더 빠른 사람을 얻는 관점에서이 문제를 보는 대신 소프트웨어의 "클래스"당 성능을 확인하십시오.

  • 로컬 램만 사용합니까? -> 가장 빠름
  • 원격 램을 사용합니까? -> 빨리
  • ram plus hardddisk-> oh hurm을 사용합니까?
  • 하드 디스크 만 사용합니까-> 실행!

3
내가 아는 memcache로 복제를 처리 할 기능이 없습니다. Memcache는 순전히 캐시를 의미합니다. 항목이 제거 / 분실 된 경우 다시 작성해야합니다. 나는 이것을 사용하지 않았거나 그것을 평가하지는 않았지만 이것은 당신에게 흥미로울 수 있습니다. code.google.com/p/memagent
Daniel

1
Membase는 memcached 프로토콜뿐만 아니라 지속성 및 복제도 지원합니다.
Jim Ferrans

1
최근에 4 개의 포트에서 본딩 된 이더넷을 보았습니다. 4 x 44MB / 초 이것은 이더넷이 연결될 수 있다고 가정하면 램을 더욱 가치있게 만듭니다!
다니엘

1
나중에 참조하기 위해 Facebook 오픈 소스의 mcrouter가 최근에 memcached에 복제를 추가합니다. 다른 것들도 날짜가 있습니다 (redis는 현재 매우 빠릅니다 등). 그러나 5 년 후에 여기에 오면 참고로
하시오

글쎄 요점은 무엇입니까? 모두 간단한 JSON 배열 direclty, 웹에서 가장 널리 사용되는 데이터 교환 형식을 저장하지 못할, 나는 그들이 생각하고 있었는지 아무 생각이 ... 아, 내가 있기 때문에 기본적으로 아무 염려 세계 오른쪽 JSON에 대해 ReJSON를 추가해야 어쩌면 기다려야
PirateApp

205

필요한 것에 따라 다르지만 일반적으로 다음과 같이 생각합니다.

  • 퍼포먼스에 대해 너무 신경 쓰지 않아야합니다. Redis는 작은 값으로 코어 당 속도가 빠르지 만 memcached는 클라이언트의 도움없이 단일 실행 파일 및 TCP 포트로 여러 코어를 사용할 수 있습니다. 또한 memcached는 100k 정도의 큰 값으로 더 빠릅니다. Redis는 최근 큰 값 (불안정한 분기)에 대해 많이 개선되었지만이 사용 사례에서는 여전히 memcached가 더 빠릅니다. 여기서 요점은 : 하나 또는 다른 하나는 그들이 제공 할 수있는 초당 쿼리에 대한 병목 현상이되지 않을 것입니다.
  • 메모리 사용에주의해야합니다. 간단한 키-값 쌍의 경우 memcached는 메모리 효율성이 높습니다. Redis 해시를 사용하는 경우 Redis가 메모리 효율성이 높습니다. 사용 사례에 따라 다릅니다.
  • Redis에서만 제공되는 두 가지 기능인 지속성 및 복제에주의해야합니다. 목표는 캐시를 구축하는 것이더라도 업그레이드 또는 재부팅 후에도 데이터가 여전히 존재하는 데 도움이됩니다.
  • 필요한 작업 종류에주의해야합니다. Redis에는 캐싱 유스 케이스를 고려하더라도 복잡한 작업이 많이 있지만 클라이언트 측에서 데이터를 처리하지 않아도 단일 작업으로 더 많은 작업을 수행 할 수 있습니다 (많은 I / O가 필요한 경우도 있음). 이 작업은 종종 일반 GET 및 SET만큼 빠릅니다. 따라서 GET / SET 만 필요로하지 않고 Redis가 많은 도움을 줄 수있는 더 복잡한 일 (타임 라인 캐싱을 고려)이 필요한 경우.

유스 케이스가 없으면 지금 당장 선택하기가 어렵지만, Redis가 DB로 사용하고 싶지 않을 때에도 더 많은 문제를 해결할 수 있기 때문에 Redis가 의미가 있다고 생각합니다. 캐싱뿐만 아니라 메시징, 순위 등도 있습니다.

물론 Redis 프로젝트의 수석 개발자이기 때문에 편견이있을 수 있습니다.


67
마지막에 큰 공개 +1
NateDSaint

6
이것이 언어 실수인지 확실하지 않지만 "일반적으로 성능에 대해 너무 신경 쓰지 않아야한다고 생각합니다"라는 주장을 이끌면 이는 심각한 문제의 원인입니다. Redis는 특정 클래스의 문제에 매우 유용 할 수 있지만 전통적으로 memcache는 지속적 데이터베이스의 성능 문제를 해결하는 데 사용되었습니다. 또한 귀하의 목록에서 눈부신 누락이 제품 성숙도라고 생각합니다. Memcache는 약 10 년의 경험을 가진 성숙한 제품입니다. Redis는 유망하지만 3 년 정도 밖에 지속되지 않았습니다.
DougW

1
@DougW이 문구를 문맥에서 벗어난 것입니다. "여기서 요점은 : 어느 쪽도 다른
쪽에서

83

솔직히 memcache는 Redis라는 새로운 이민자와 비교할 때 성능 관점에서 나쁜 선택 인 오래된 공룡입니까?

  • 기능 세트를 비교하면 Redis더 많은 기능을 사용할 수 있습니다.
  • 설치 용이성을 비교 Redis하는 것도 훨씬 쉽습니다. 종속성이 필요하지 않습니다.
  • 적극적인 개발을 비교하는 Redis것도 좋습니다.
  • 나는 memcached보다 약간 빠르다고 생각 Redis합니다. 디스크를 전혀 건드리지 않습니다.
  • 내 의견은 Redis그보다 더 나은 제품 memcached입니다.

31
redis는 디스크에 알려 주면 디스크를 만집니다. 보통 매 초마다 fsync를 수행합니다.-> 눈치 채지 못할 것입니다.
Marc Seeger

1
@ 마크 p. 나는 또한 디스크를 전혀 건드리지 말라고 말할 수 있다고 생각하지만 표준은 항상 지금은 fsyncs라고 생각합니까?
Alfred

3
또한 내 경험상 Redis는 Memcached보다 약간 빠릅니다 (메모리 전용 모드에서 Redis를 사용할 때). Antirez는 여기서 테스트를 실시했습니다 antirez.com/post/redis-memcached-benchmark.html
Sune Rievers

10
큰 차이점 : Memcached는 멀티 스레드이며 Redis는 아닙니다. 따라서 단일 요청의 대기 시간은 비슷하지만 동시성이 높은 경우 Memcached는 더 많은 요청을 처리 할 수 ​​있습니다. 반면에 Redis는 1 개의 CPU 코어 / 스레드 만 사용하기 때문에 몇 개의 동시 요청만으로도 최대 성능에 도달 할 수 있습니다. 이를 피하기 위해 제안 된 방법은 일관된 해싱을 사용하여 한 시스템에서 여러 Redis 인스턴스를 실행하는 것입니다. 그러나 이것은 실제로 좋지 않은 솔루션입니다. 따라서 높은 동시성이 필요하고 멀티 코어 CPU가없는 경우 Memcached가 훨씬 빠릅니다.
ColinM

2
@Alfred, Redis가 단일 스레드라는 숨겨진 사실이 아니며 저자가 디자인 결정 (단순성에 대한 단순성)입니다. 위의 더스틴 기사는 실제 영향을 미친다는 확실한 증거입니다. 또한 Redis를 Zend_Cache 백엔드로 사용하는 자체 벤치 마크에서이를 확인했습니다. 동시성이 증가함에 따라 Redis는 memcached에 비해 비교적 빨리 안정됩니다.
ColinM

46

Redis가 수행하지 않는 memcached는 캐시에서 가장 최근에 사용한 값을 제거하는 것입니다. memcached를 사용하면 원하는만큼 값을 안전하게 설정할 수 있으며 메모리 오버플로가 발생하면 최근에 사용하지 않은 값이 삭제됩니다. Redis를 사용하면 모든 것에 대한 시간 제한을 설정하여 대략적인 값만 얻을 수 있습니다. 메모리를 확보해야 할 경우 임의의 3 개의 키를보고 만료에 가장 가까운 키를 삭제합니다.

캐시로만 사용하는 것이 주요 차이점입니다.



13

Membase를보고 싶을 수도 있습니다.

http://www.northscale.com/products/membase_server.html

나는 그것을 사용하지 않았지만 지속성이있는 메모리 중심의 KV 저장소라는 점에서 Redis와 비슷합니다. 내가 볼 수있는 것과의 주요 차이점은 다음과 같습니다.

  • Redis는 훨씬 더 많은 데이터 조작 기능을 제공합니다 (순서 설정 등).
  • Redis는 수평 확장 성을 추가하기 위해 보류중인 Redis Cluster 프로젝트를 보유하고 있습니다.
  • Redis는 LRU와 객체 크기를 모두 고려하는 하이브리드 알고리즘을 기반으로 단일 계층의 데이터 오프로드 디스크 (VM)를 보유하고 있습니다.

  • Membase는 memcached 와이어 프로토콜을 사용합니다. 기존 응용 프로그램의 업그레이드 경로로 유용합니다.

  • Membase는 분산 해시 테이블 방식을 사용하여 수평으로 확장되도록 설정되었습니다.
  • Membase는 LRU 접근 방식을 사용하여 여러 계층의 데이터 오프로드를 지원할 수 있습니다 (매우 사용되는 디스크는 거의없고 SSD에는 거의 사용되지 않으며 RAM에 자주있는 데이터는 거의 없음)
  • Membase의 TTL 기능에 대해 확실하지 않습니다.

선택은 애플리케이션이 Redis의 추가 데이터 조작 기능을 활용할 수있는 정도에 따라 달라질 수 있습니다.


안녕 딘, 게시물 주셔서 감사합니다. 확실히 확인하겠습니다. PHP에서 Membase를 사용할 수 있습니까?
Industrial

4
Membase는 memcached와 프로토콜을 사용하기 때문에, memcached를 클라이언트의 작업을해야합니다 : wiki.membase.org/bin/view/Main/Clients을
HikeOnPast

Membase는 TTL을 지원합니다. 모든 Memcache 구현은 만료 시간과 함께 풋을 지원합니다. github.com/memcached/memcached/blob/master/doc/protocol.txt#L79
Saurav

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.