Memcached 대신 Memcache를 언제 사용해야합니까?


321

PHP에는 memcachememcached 라는 두 개의 memcached 라이브러리가있는 것 같습니다 . 차이점은 무엇이며 어떤 것을 사용해야하는지 어떻게 알 수 있습니까? 오래된 것입니까? memcached는 더 많은 메소드를 제공하는 것 같습니다. 개발이 가장 많았다는 것을 의미한다고 생각하지만 외부 C / C ++ 라이브러리가 필요 하므로 설치할 수 있는지 확실하지 않습니다.

memcache는 오래 지속되었으며 추가 라이브러리가 필요하지 않으며 Windows 용 사전 바이너리미리 컴파일 한 것 같습니다 ! 나는 그것이 더 나은 선택이 될 것이라고 생각합니다. 그러나 memcached (서버)에 익숙하지 않아 memcached (php)에 여분의 문제를 일으킬만한 중요한 기능이 있는지 확실하지 않습니다.


1
ZendCon은이 두 가지를 비교하는 좋은 에피소드를 가지고 있습니다. ZendCon 세션 에피소드 040는 : memcached를 : 더 나은 Memcache의 인터페이스를
존 목련을

며칠 만 에 serverfault.com/questions/63383/memcache-vs-memcached의 사본이 생성 되었지만 더 많은 견해와 투표를 받았습니다. :)
Stefano

답변:


249

Memcached 클라이언트 라이브러리는 최근에 안정적으로 릴리스되었습니다. 그것은 사용중인 디그 와 구현 훨씬 더의 (지금은 더 이상 디그와 안드레이 Zmievski에 의해 디그 개발되지 않았다) memcached와 프로토콜 이전 memcache에 클라이언트보다. memcached의 가장 중요한 기능은 다음과 같습니다.

  1. CAS 토큰 . 이로 인해 제 인생이 훨씬 쉬워졌고 오래된 데이터를 쉽게 예방할 수있는 시스템입니다. 캐시에서 무언가를 가져올 때마다 cas 토큰 (더블 번호)을받을 수 있습니다. 해당 토큰을 사용하여 업데이트 된 객체를 저장할 수 있습니다. 스레드가 실행되는 동안 다른 사람이 값을 업데이트하지 않으면 스왑이 성공합니다. 그렇지 않으면 최신 cas 토큰이 작성되고 데이터를 다시로드하고 새 토큰으로 다시 저장해야합니다.
  2. 얇게 썬 빵부터 콜백을 읽는 것이 가장 좋습니다. 내 코드의 대부분을 단순화했습니다.
  3. getDelayed () 는 스크립트가 결과가 서버에서 되돌아 오기를 기다리는 시간을 줄일 수있는 유용한 기능입니다.
  4. memcached 서버는 매우 안정적이지만 가장 빠르지는 않습니다. 최신 클라이언트에서는 ASCII 대신 이진 프로토콜을 사용할 수 있습니다.
  5. 복잡한 데이터를 memcached에 저장할 때마다 클라이언트는 항상 값의 직렬화를 수행하는 데 사용되지만 속도가 느리지 만 이제 memcached 클라이언트에서는 igbinary 를 사용할 수 있습니다 . 지금까지 나는 이것이 얼마나 많은 성능을 얻을 수 있는지 테스트 할 기회가 없었습니다.

이 모든 점은 최신 클라이언트로 전환하기에 충분했으며 그것이 매력처럼 작동한다고 말할 수 있습니다. libmemcached 라이브러리 에 대한 외부 종속성이 있지만 그럼에도 불구하고 Ubuntu 및 Mac OSX에 설치했지만 지금까지 아무런 문제가 없습니다.

최신 라이브러리로 업데이트하기로 결정한 경우 최신 서버 버전으로 업데이트하고 멋진 기능도 제공하는 것이 좋습니다. 컴파일 하려면 libevent 를 설치해야 하지만 우분투에서는 큰 문제가되지 않았습니다.

지금까지 프레임 워크가 새로운 memcached 클라이언트를 선택하는 것을 보지 못했지만 (내가 추적하지는 않지만) Zend 가 곧 출시 될 것이라고 가정 합니다.

최신 정보

Zend Framework 2에는 Memcached 용 어댑터가 있습니다.


1
훌륭한 답변; 또한 libmemcached에 대한 외부 종속성은 실제로 더 적극적으로 개발 된 클라이언트 중 하나이므로 실제로 플러스입니다.
Marc Bollinger

동의했다. libmemcached 외부 종속성은 libevent와 동일하게 문제로 간주되어서는 안됩니다.
Miha Hribar

1
Cas 토큰은 가장 큰 플러스처럼 들립니다. 실제로 이러한 기능을 살펴보면 memcached가 DB와 같은 관리되는 데이터 홀더로 가고 임시 캐시와는 달리 더 많은 것처럼 보입니다.
Xeoncross

당신이 그것을 찾고 있다면 이미 memcached 프로토콜을 말하는 Berkley DB 인 memcachedb ( memcachedb.org ) 가 이미 있습니다 .
Miha Hribar

8
이 대답은 memcache와 memcached?의 차이점조차 말해주지 않습니다! memcache는 이전 버전의 memcached입니까?
Daniel W.

10

Windows를 사용하는 경우 비교가 짧아집니다. memcache사용 가능한 유일한 클라이언트 인 것 같습니다.


memcached확장명 을 항상 직접 추가 할 수 는 없습니까?
Pacerier

1
이것은 실제로 사실이 아닌 것 같습니다. commaster.net/content/installing-memcached-windows
Joe Leonard

링크 된 페이지의 @JoeLeonard : " memcachedPHP에서 인터페이스하려면 PHP memcache용 확장 을 설치해야합니다 "
rymo

8

이것은 2013 년입니다. 2009 년 코멘트는 잊어 버리십시오. 마찬가지로, 심각한 트래픽로드를 실행중인 경우에는 Windows 기반 memcache를 사용하여 수행하는 방법도 고려하지 마십시오. 대규모 (500 개 이상의 프런트 엔드 웹 서버) 및 20 개 이상의 백엔드 데이터베이스 서버 및 복제본 (mysql 및 mssql 믹스)을 처리 할 때 memcached 서버 팜 (그룹 12 개 서버)은 25K에 응답하는 여러 개의 대용량 OLTP 응용 프로그램을 지원합니다. ~ 40K mc-> 초당 전화 받기 이러한 호출은 않는 것들이다 NOT 데이터베이스에 도달해야합니다.

IMHO는 이러한 memcached 사용을 통해 새로운 DB 서버 및 라이센스에 대한 CAPEX 및 대규모 상용 설계에 대한 지원 계약에 대해 $$$$를 절약했습니다.


48
이것은 PHP에서 memcache 프로토콜의 두 구현 간의 차이점에 대한 질문에 어떻게 대답합니까?
Marki555

9
이것은 의견이어야합니다.
Elijah Lynn

7

Memcached는 최신 API이며, 서버 팜이있는 경우 세션 공급자로 memcached를 제공합니다.

버전이 여전히 0.2로 낮지 만 두 가지를 모두 사용했지만 큰 문제가 발생하지 않았으므로 새로운 버전이므로 memcached로 이동합니다.


1
두 가지 모두 실제로 세션 처리기로 작동하지는 않지만 세션 처리기로 작동합니다. us3.php.net/manual/en/memcache.examples-overview.php
Xeoncross

내 나쁜 점을 잘 잡으십시오. 그렇습니다 .io가 정말로 중요해질 때 큰 서버에서만 유용합니다 .memcache는 메모리를 얻기 위해 일부 객체를 떨어 뜨려서 물건을 확장하는 방법을 알기가 어렵다는 것을 검증하지 않습니다.
RageZ

1
0.2 버전은 안정적인 1.0.0 버전을 능가했습니다.
Miha Hribar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.