예를 들어 PECL에는 Memcache와 Memcached라는 두 가지 Memcached 모듈이 있습니다. 현재 대부분의 PHP 환경은 이름에 d가 없는 Memcache 버전을 사용하며, d가 포함된 Memcached 버전은 libmemcached를 기반으로 합니다. , 따라서 Memcached 버전에는 더 완전한 기능이 있습니다.
PHP 모듈의 Memcached 버전 설치
wget http://download.tangent.org/libmemcached-0.35.tar.gz
tar zxf libmemcached-0.35.tar.gz
cd libmemcached- 0.35
./configure
make
make install
wget http://pecl.php.net/get/memcached-1.0.0.tgz
tar zxf memcached-1.0.0. tgz
cd memcached-1.0.0
phpize
./configure
make
make install
php.ini를 열고 다음을 추가하세요:
extension = "memcached.so"
설치가 완료되면 다음 명령으로 확인할 수 있습니다.
php -m | grep mem
Memcached 버전의 새로운 기능을 보여줍니다.
먼저 문제를 초기값으로 가정합니다. 카운터는 정수입니다. 증가 방법을 사용하지 마십시오. get/set을 통해 매번 1씩 증가합니다.
Memcache 버전에서는 다음과 같이만 진행할 수 있습니다:
$m = new Memcache();
$m->addServer('localhost', 11211);
$v = $ m->get('counter');
$m->set('counter', $v 1);
get/set 두 액션은 Atom Operation으로 사용할 수 없으므로 여러 프로세스가 동시에 처리하게 되면 손실이 발생할 가능성이 있습니다. 더욱 짜증나는 점은 손실이 언제 발생할지 알 수 없다는 점입니다.
Memcached 버전에서 이를 수행하는 방법을 살펴보겠습니다.
$md = new Memcached();
$md->addServer('localhost', 11211);
$v = $ md->get('counter', null, $token)
$md->cas($token, 'counter', $v 1);
cas는 Memcached 버전에서 제공하는 함수입니다. 직설적으로 말하면 낙관적 잠금 기능입니다. $token의 값을 var_dump하면 $token이 실제로 버전 번호임을 알 수 있습니다. get을 통해 얻은 $token 버전 번호가 cas와 일치하지 않으면 다른 작업이 업데이트되면 이때 cas 작업이 실패하게 됩니다. 작업을 계속하는 방법은 사용자에게 달려 있습니다.
참고: 충돌 상황을 수동으로 재현하려면 get과 cas 사이에 몇 초 동안 대기한 후 두 스크립트를 복사하고 차례로 실행하면 됩니다.
그런데 Memcached 버전 모듈에 권장되는 해시 설정은 다음과 같습니다.
$md->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
$md->setOption (Memcached::OPT_HASH, Memcached::HASH_CRC);
요약
Memcached 버전에도 getByKey, setByKey 등을 통해 여러 서버를 자동으로 지원하는 등 Memcache에 없는 기능이 많이 포함되어 있으니 생략하겠습니다. 어떤 확장 프로그램을 사용할지는 자명합니다.
보충: http://code.google.com/p/memcached/wiki/PHPClientComparison
위에서는 Memcache PHP 모듈을 소개합니다. Memcached는 Memcache 콘텐츠를 포함하여 Memcache보다 더 많은 기능을 가지고 있습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되길 바랍니다.