PHP & memcached

http://nio.infor96.com/php-memcached/
쇼 리 다 (KrazyNio AT hotmail. com), 2006.004. 06, 전재 출처 를 밝 혀 주 십시오.
1. memcached 안내
많은 경우 에 우 리 는 memcached 라 는 이름 을 들 을 수 있 지만 많은 친구 들 이 들 어 본 적 이 있 을 뿐 사용 해 본 적 이 없 거나 실제 적 으로 알 아 본 적 이 없고 좋 은 물건 이라는 것 만 알 고 있다.여기 서 간단하게 소개 하 겠 습 니 다. memcached 는 효율 적 이 고 빠 른 분포 식 메모리 대상 캐 시 시스템 으로 주로 WEB 동적 응용 프로그램 을 가속 화 하 는 데 사 용 됩 니 다.
2. memcached 설치
먼저 memcached 를 다운로드 하 였 습 니 다. 현재 최신 버 전 은 1.1.12 입 니 다. 공식 사이트 에서 memcached - 1.1.2. tar. gz 를 직접 다운로드 할 수 있 습 니 다.그 밖 에 memcached 는 libevent 를 사 용 했 습 니 다. 제 가 다운로드 한 것 은 libevent - 1.1a. tar. gz 입 니 다.
다음은 libevent - 1.1a. tar. gz 와 memcached - 1.1.2. tar. gz 를 각각 가방 을 풀 고 컴 파일 하 며 설치 합 니 다.
# tar -xzf libevent-1.1a.tar.gz
# cd libevent-1.1a
# ./configure --prefix=/usr
# make
# make install
# cd ..
# tar -xzf memcached-1.1.12.tar.gz
# cd memcached-1.1.12
# ./configure --prefix=/usr
# make
# make install

설치 가 완료 되면 memcached 는 / usr / bin / memcached 에 있어 야 합 니 다.
3. memcached 데 몬 실행
memcached 데 몬 을 실행 하 는 것 은 간단 합 니 다. 명령 행 하나만 있 으 면 됩 니 다. 설정 파일 을 수정 할 필요 가 없습니다. (설정 파일 도 수정 하지 않 았 습 니 다)
/usr/bin/memcached -d -m 128 -l 192.168.1.1 -p 11211 -u httpd

매개 변수 설명:
-d      (daemon)     memcached;
-m    memcached          ,    M;
-l       IP   ,       ,          ;
-p        ,    11211,           ;
-u     ,      root   ,           。

물론 다른 매개 변 수 를 사용 할 수 있 습 니 다. man memcached 한 번 에 볼 수 있 습 니 다.
4. memcached 의 작업 원리
먼저 memcached 는 데 몬 방식 으로 하나 이상 의 서버 에서 실 행 됩 니 다. 클 라 이언 트 의 연결 작업 을 수시로 받 습 니 다. 클 라 이언 트 는 다양한 언어 로 작 성 될 수 있 습 니 다. 현재 알려 진 클 라 이언 트 API 는 Perl / PHP / python / Ruby / 자바 / C \ # / C 등 을 포함 합 니 다.PHP 등 클 라 이언 트 가 memcached 서비스 와 연결 한 후에 다음 일 은 액세스 대상 입 니 다. 액세스 대상 마다 유일한 식별 자 key 가 있 습 니 다. 액세스 작업 은 모두 이 key 를 통 해 이 루어 집 니 다. memcached 에 저 장 된 대상 은 실제 메모리 에 저 장 된 것 이지 cache 파일 에 저 장 된 것 이 아 닙 니 다.이것 도 memcached 가 이렇게 효율 적 이 고 빠 른 이유 이다.이 대상 들 은 오래 지속 되 지 않 습 니 다. 서비스 가 멈 추 면 안의 데 이 터 를 잃 어 버 립 니 다.
3. PHP 는 memcached 클 라 이언 트 로 어떻게 사용 합 니까?
PHP 를 memcached 클 라 이언 트 로 하고 memcached 서 비 스 를 호출 하여 대상 액세스 작업 을 할 수 있 는 두 가지 방법 이 있 습 니 다.
첫 번 째, PHP 는 memcache 라 는 확장 이 있 습 니 다. Linux 에서 컴 파일 할 때 – enable - memcache [= DIR] 옵션 을 가 져 가 야 합 니 다. Window 아래 에 서 는 phop. ini 에서 phop 을 제거 합 니 다.memcache. dll 앞 에 있 는 주석 부 호 를 사용 할 수 있 도록 합 니 다.
그 밖 에 확장, 재 컴 파일 로 인 한 번 거 로 움 을 피 할 수 있 는 방법 도 있 습 니 다. 그것 은 바로 phop - memcached - client 를 직접 사용 하 는 것 입 니 다.
본 고 는 두 번 째 방식 을 선택 하여 확장 라 이브 러 리 보다 효율 이 약간 떨 어 지지 만 문제 가 크 지 않다.
4. PHP memcached 응용 예제
먼저 memcached - client. php 를 다운로드 하고 memcached - client. php 를 다운로드 한 후 이 파일 의 클래스 'memcached' 를 통 해 memcached 서 비 스 를 조작 할 수 있 습 니 다.사실 코드 호출 은 매우 간단 합 니 다. 주로 사용 하 는 방법 은 add (), get (), replace () 와 delete () 가 있 습 니 다. 방법 은 다음 과 같 습 니 다.add ($key, $val, $exp = 0) memcached 에 대상 을 기록 합 니 다. $key 는 대상 의 유일한 식별 자 입 니 다. $val 은 기록 한 대상 데이터 입 니 다. $exp 는 만 료 시간 이 고 단 위 는 초 이 며 기본 값 은 시간 제한 이 없습니다.get ($key) memcached 에서 대상 데 이 터 를 가 져 오고 대상 의 유일한 식별 자 $key 를 통 해 가 져 옵 니 다.replace ($key, $value, $exp=0) memcached 에 있 는 식별 자 를 $key 의 대상 내용 으로 $value 로 교체 합 니 다. 매개 변 수 는 add () 방법 과 마찬가지 로 $key 대상 이 존재 하 는 경우 에 만 작 동 합 니 다.delete ($key, $time = 0) memcached 에 있 는 식별 자가 $key 인 대상 을 삭제 하고 $time 은 선택 가능 한 매개 변수 로 삭제 하기 전에 얼마나 기 다 려 야 하 는 지 표시 합 니 다.
다음은 간단 한 테스트 코드 입 니 다. 코드 에서 식별 자가 'my key' 인 대상 데 이 터 를 액세스 합 니 다.
 <pre> <?php //     memcached     require_once('memcached-client.php'); //       $options = array(     'servers' => array('192.168.1.1:11211'), //memcached      、  ,             memcached        'debug' => true,  //     debug     'compress_threshold' => 10240,  //                   'persistant' => false  //             ); //     memcached      $mc = new memcached($options); //                $key 'mykey'; //    memcached       $mc->add($key'some random strings'); $val $mc->get($key); echo "n'.str_pad('$mc->add() '60'_')."n'; var_dump($val); //              $mc->replace($key, array('some'=>'haha''array'=>'xxx')); $val $mc->get($key); echo "n'.str_pad('$mc->replace() '60'_')."n'; var_dump($val); //     memcached      $mc->delete($key); $val $mc->get($key); echo "n'.str_pad('$mc->delete() '60'_')."n'; var_dump($val); ?> </pre>

간단 하지 않 습 니까? 실제 응용 에 서 는 데이터 베 이 스 를 조회 한 결과 집 을 memcached 에 저장 합 니 다. 다음 에 방문 할 때 memcached 에서 직접 얻 고 데이터 베 이 스 를 조회 하지 않 습 니 다. 그러면 데이터 베이스 의 부담 을 어느 정도 줄 일 수 있 습 니 다.보통 SQL 구문 md5 () 이후 의 값 을 유일한 식별 자 key 로 합 니 다.다음은 memcached 를 이용 하여 데이터베이스 조회 결과 집합 을 캐 시 하 는 예제 입 니 다.
 <?php $sql 'SELECT * FROM users'; $key md5($sql);   //memcached       if ( !($datas $mc->get($key)) ) {     //    memcached          ,             。     echo "n'.str_pad('Read datas from MySQL.'60'_')."n';     $conn mysql_connect('localhost''test''test');     mysql_select_db('test');     $result mysql_query($sql);     while ($row mysql_fetch_object($result))         $datas[] = $row;     //                    memcached  ,         。     $mc->add($key$datas); } else {     echo "n'.str_pad('Read datas from memcached.'60'_')."n'; } var_dump($datas); ?> 

이 를 통 해 알 수 있 듯 이 memcached 를 사용 한 후에 데이터 베이스 연결, 조회 작업 을 줄 일 수 있 고 데이터 베이스 가 부하 되 어 스 크 립 트 의 운행 속도 도 향상 되 었 다.
이전에 저 는 라 는 글 을 쓴 적 이 있 습 니 다. 글 에서 SESSION 은 데이터 베 이 스 를 사용 하여 저 장 된 것 입 니 다. 동시 방 문 량 이 많 을 때 서버 의 부하 가 매우 크 고 MySQL 의 최대 연결 수 를 초과 할 수 있 습 니 다. memcached 를 이용 하면 우 리 는 이 문 제 를 잘 해결 할 수 있 습 니 다. 작업 원 리 는 다음 과 같 습 니 다.
  • 사용자 가 웹 페이지 를 방문 할 때 memcached 에 현재 사용자 의 SESSION 데이터 가 있 는 지 확인 하고 session 을 사용 합 니 다.id () 는 유일한 식별 자로 서데이터 가 존재 하지 않 으 면 바로 되 돌아 갑 니 다. 존재 하지 않 으 면 데이터 베 이 스 를 연결 하여 SESSION 데 이 터 를 가 져 오고 이 데 이 터 를 memcached 에 저장 하여 다음 에 사용 할 수 있 습 니 다.
  • 현재 PHP 실행 종료 (또는 session write close () 사용 시 My 호출 됨Sess: write () 방법 은 데 이 터 를 데이터베이스 에 기록 합 니 다. 그러면 매번 데이터 베 이 스 를 조작 합 니 다. 이 방법 에 대해 서도 최적화 가 필요 합 니 다.전역 변 수 를 사용 하여 사용자 가 페이지 에 들 어 갈 때의 SESSION 데 이 터 를 기록 한 다음 write () 방법 에서 이 데 이 터 를 쓰 려 는 SESSION 데이터 와 같 는 지 비교 하고 데이터베이스 연결, 데이터 베 이 스 를 기록 하 는 동시에 memcached 에 대응 하 는 대상 을 삭제 합 니 다. 같 으 면 SESSION 데이터 가 변 하지 않 았 음 을 나타 냅 니 다.그러면 아무런 조작 도 하지 않 고 바로 돌아 갈 수 있다.
  • 그러면 사용자 세 션 만 료 시간 은 어떻게 해결 합 니까?memcached 의 add () 방법 에 만 료 된 시간 인자 $exp 가 있 는 것 을 기억 하 십 니까?이 매개 변수 값 을 SESSION 의 최대 생존 시간 보다 작 게 설정 하면 됩 니 다.또한 온라인 에 있 는 사용자 들 에 게 SESSION 을 지속 하 는 시간 을 주 는 것 도 잊 지 마 세 요. 이것 은 write () 방법 에서 해결 할 수 있 습 니 다. 판단 시간 을 통 해 조건 에 맞 으 면 데이터 베 이 스 를 업데이트 할 수 있 습 니 다.

  • 관련 자원
  • memcached 공식 사이트
  • PHP memcached client
  • memcached - client. php 다운로드
  • 좋은 웹페이지 즐겨찾기