>  기사  >  백엔드 개발  >  php-Memcached 설치 및 사용

php-Memcached 설치 및 사용

伊谢尔伦
伊谢尔伦원래의
2016-11-21 17:34:412657검색

1. 소개 및 설치

Memcached는 고성능 분산 메모리 개체 캐싱 시스템으로, 일반적으로 동적 웹 애플리케이션의 응답 속도를 향상시키기 위해 데이터베이스 로딩 압력을 줄이는 데 사용됩니다.

이 확장은 libmemcached 라이브러리에서 제공하는 API를 사용하여 memcached 서버와 상호 작용합니다. 또한 세션 핸들러(memcached)도 제공합니다.

memcached 설치에 대해서는 Ubuntu에서 memcached 설치 및 구성 문서를 참조하세요.

PHP 확장 memcached를 설치하기 전에 libmemcached를 설치해야 합니다. libmemcached는 memcached의 C/C++ 로컬 클라이언트 라이브러리입니다.

libmemcached를 설치하기 전에 먼저 libcloog-ppl0을 설치해야 합니다. 그렇지 않으면 컴파일 및 설치 프로세스 중에 오류가 발생합니다.

sudo apt-get install libcloog-ppl0

그런 다음 http://libmemcached에서 다운로드하세요. org/libMemcached.html 지정된 디렉터리에 필요한 libmemcached 소스 코드 설치 패키지의 압축을 풀고 디렉터리를 입력한 후 다음 지침을 실행합니다.

./configure --prefix=/usr/local/libmemcached
make
sudo make install

그런 다음 필요한 PHP memcached 확장을 다운로드할 수 있습니다. 여기에서 소스 코드 설치 패키지: http://pecl.php.net/package/memcached, 지정된 디렉터리에 압축을 풀고 해당 디렉터리에 들어간 후 다음 지침을 실행하십시오.

phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached
make
sudo make install

오류 설치 프로세스 중에 보고될 수 있습니다.

未知类型名称:memcached_server_instance_st

으로 인해 make가 실패합니다. 해결 방법은 다음과 같습니다.

memcached 확장 압축 해제 디렉터리: php_libmemcached_compat.h에서 이 파일을 찾은 다음 다음 줄을 추가하세요

typedef const struct memcached_server_st *memcached_server_instance_st;

다시 만들면 괜찮을 것입니다.

설치 성공 후 php.ini에 확장명=memcacached를 추가한 후 Apache를 다시 시작하고 phpinfo를 확인한 후 다음 섹션을 확인하세요

php-Memcached 설치 및 사용

설치가 성공적으로 완료되었음을 증명합니다.

2. 시간 초과

일부 저장소 명령에는 서버로 전송될 때 만료 값(요소 또는 클라이언트 작업 요청과 관련)이 포함됩니다. 이러한 모든 용도에 대해 전송되는 실제 값은 Unix 타임스탬프(1970년 1월 1일부터 만료 시간까지의 정수 시간(초))이거나 지금부터의 시간(초)일 수 있습니다. 후자의 경우 이 초 수는 60×60×24×30(30일의 초)을 초과할 수 없습니다. 유효하지 않은 값이 이 값보다 크면 서버는 이를 실제 Unix 타임스탬프로 처리합니다. 현재 시간.

만료 값이 0(기본값)으로 설정되면 요소는 만료되지 않습니다(그러나 다른 새 요소에 공간을 할당하기 위해 서버에서 삭제될 수 있음).

3. 콜백

1. 결과 콜백

결과 콜백 메소드는 Memcached::getDelayed() 또는 Memcached::getDelayedBykey()를 통해 요소를 얻은 후의 결과입니다. 메서드 집합의 각 요소에 대해 한 번씩 호출됩니다. 콜백 함수는 배열로 설명된 Memcached 개체 및 요소 정보를 받을 수 있습니다. 이 콜백 함수는 정보를 반환할 필요가 없습니다.

예제 #1 결과 콜백 예

<?php
    $m = new Memcached();
    $m->addServer(&#39;localhost&#39;, 11211);
    $items = array(
        &#39;key1&#39; => &#39;value1&#39;,
        &#39;key2&#39; => &#39;value2&#39;,
        &#39;key3&#39; => &#39;value3&#39;
    );
    $m->setMulti($items);
    $m->getDelayed(array(&#39;key1&#39;, &#39;key3&#39;), true, &#39;result_cb&#39;);
    function result_cb($memc, $item)
    {
        var_dump($item);
    }
?>

위 루틴의 출력은 다음과 유사합니다.

array(3) {
  ["key"]=> string(4) "key1"
  ["value"]=> string(6) "value1"
  ["cas"]=> float(49)
}
array(3) {
  ["key"]=> string(4) "key3"
  ["value"]=> string(6) "value3"
  ["cas"]=> float(50)
}

2. 캐시 콜백을 통해 읽습니다.

읽기 캐시 콜백은 서버에서 요소가 검색되지 않을 때 호출됩니다. 이 콜백 함수는 Memcached 객체, 요청된 키, 참조로 전달된 값 변수라는 세 가지 매개변수를 받습니다. 이 콜백 함수는 true 또는 false를 반환하여 키에 값이 없을 때 기본값을 설정하도록 결정하는 역할을 담당합니다. 콜백이 true를 반환하면 Memcached는 "발신 매개변수"(참조로 전달된 값 변수)에 저장된 값을 memcached 서버에 저장하고 이를 원래 호출 함수에 반환합니다. Memcached::get() 및 Memcached::getByKey()만이 이러한 유형의 콜백을 지원합니다. 왜냐하면 Memcache 프로토콜은 여러 키를 요청할 때 검색되지 않은 키에 대한 정보 제공을 지원하지 않기 때문입니다.

예제 #2 콜백을 통한 읽기 예

<?php
    $m = new Memcached();
    $m->addServer(&#39;localhost&#39;, 11211);
    $profile_info = $m->get(&#39;user:&#39;.$user_id, &#39;user_info_cb&#39;);
    function user_info_cb($memc, $key, &$value)
    {
        $user_id = substr($key, 5);
        /* 从数据库读取个人信息 */
        /* ... */
        $value = $profile_info;
        return true;
    }
?>
4. 세션 지원

memcached는 사용자 세션 데이터를 memcached 서버에 저장하는 데 사용할 수 있는 맞춤형 세션 프로세서를 제공합니다. . 내부적으로는 완전히 별도의 Memcached 인스턴스가 사용되므로 필요한 경우 다른 서버 풀을 설정할 수 있습니다. 세션 키는 memc.sess.key라는 접두사 아래에 저장됩니다. 따라서 세션과 일반 캐싱에 동일한 서버 풀을 사용하는 경우 이 점에 유의하시기 바랍니다. 주석: 세션이 일반 캐시와 분리되는 또 다른 이유는 일반 캐시가 memcached 서버를 가득 채울 때 세션이 캐시에서 쫓겨나고 사용자의 연결이 알 수 없는 이유로 끊어질 수 있다는 것입니다.

session.save_handler는 memcached의 세션 프로세서를 활성화하기 위해 memcached로 설정됩니다. session.save_path는 쉼표로 구분된 호스트 이름:포트 스타일 세션 캐시 서버 풀을 정의합니다(예: "sess1:11211, sess2:11211").

5. Memcached 클래스

는 memcached 서비스를 나타냅니다. 클러스터 연결.

Memcached::add — 새 키에 요소 추가

Memcached::addByKey — 지정된 서버의 새 키에 요소 추가

Memcached::addServer — 서버 풀에 서버 추가

Memcached::addServers — 서버 풀에 여러 서버 추가

Memcached::append — 기존 요소에 데이터 추가

Memcached::appendByKey — 지정된 서버에 데이터 추가 데이터 추가 요소가 존재한 후

Memcached::cas — 값 비교 및 ​​교환

Memcached::casByKey — 지정된 서버의 값 비교 및 ​​교환

Memcached::__construct — Memcached 인스턴스 생성

Memcached::decrement — 숫자 요소의 값 감소

Memcached::decrementByKey — 특정 서버에 저장된 숫자 항목의 값 감소

Memcached: :delete — 요소 삭제

Memcached::deleteByKey — 지정된 서버에서 요소 삭제

Memcached::deleteMulti — 여러 항목 삭제

Memcached::deleteMultiByKey — 특정 서버에서 여러 항목 삭제

Memcached::fetch — 다음 결과 가져오기

Memcached::fetchAll — 남은 결과 모두 가져오기

Memcached::flush — 무효화 캐시의 모든 요소

Memcached::get — 요소 검색

Memcached::getAllKeys — 모든 서버에 저장된 키 가져오기

Memcached::getByKey — 요소 검색 지정된 서버에서

Memcached::getDelayed — 지정된 서버에서 여러 요소 요청

Memcached::getDelayedByKey — 지정된 서버에서 여러 요소 요청

Memcached:: getMulti — 여러 요소 검색

Memcached::getMultiByKey — 특정 서버에서 여러 요소 검색

Memcached::getOption — Memcached의 옵션 값 가져오기

Memcached::getResultCode — 마지막 작업의 결과 코드 반환

Memcached::getResultMessage — 마지막 작업의 결과 설명 메시지 반환

Memcached::getServerByKey — 키로 매핑된 서버 정보 가져오기

Memcached::getServerList — 서버 풀의 서버 목록 가져오기

Memcached::getStats — 서버 풀의 통계 가져오기

Memcached::getVersion — 모든 버전 가져오기 서버 풀 정보

Memcached::increment — 숫자 요소의 값 증가

Memcached::incrementByKey — 특정 서버에 저장된 숫자 항목의 값 증가

Memcached::isPercious — Memcache에 대한 영구 연결이 사용되고 있는지 확인

Memcached::isPristine — 인스턴스가 최근에 생성되었는지 확인

Memcached::prepend — 데이터를 맨 앞에 추가 기존 요소

Memcached::prependByKey — 특정 서버의 기존 항목 앞에 데이터 추가

Memcached::quit — 열려 있는 모든 연결 닫기

Memcached::replace — 키 요소 아래의 기존 항목 교체

Memcached::replaceByKey — 특정 서버의 기존 키 아래 항목 교체

Memcached::resetServerList — 서버 목록에서 모든 서버 삭제

Memcached:: set — 요소 저장

Memcached::setByKey — 특정 서버에 항목 저장

Memcached::setMulti — 여러 요소 저장

Memcached ::setMultiByKey — 특정 서버에 여러 항목 저장

Memcached::setOption — Memcached 옵션 설정

Memcached::setOptions — Memcached 옵션 설정

Memcached::setSaslAuthData — 인증에 사용할 자격 증명 설정

Memcached::touch — 항목에 새 만료 설정

Memcached::touchByKey — 특정 서버의 항목에 새 만료 설정


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.