> 백엔드 개발 > PHP 튜토리얼 > Memcache를 이용한 PHP 디버깅 방법 소개 및 적용

Memcache를 이용한 PHP 디버깅 방법 소개 및 적용

WBOY
풀어 주다: 2016-08-08 09:29:33
원래의
852명이 탐색했습니다.

Memcache를 이용한 PHP

의 디버깅 방법 소개 및 적용 우리가 네트워크 개발을 하고 있다면, 특히 방문량이 많은 프로젝트 개발에서는 응답 속도를 높이고 데이터 쿼리 작업을 줄이기 위해 memcahce를 선택하겠습니다. 먼저 설치해야 합니다. 다음으로 memcache 사용법을 소개하고 linux에서 설치하는 방법을 소개합니다. Windows에서의 설치 및 구성은 다음과 같습니다.

1. Linux에서의 Memcache 설치:

1.linux memcache 버전을 다운로드하세요, 참고하세요 memcached libevent 를 사용하므로 이벤트 기반이므로 libevent먼저.

2.

pecl::memcache를 설치합니다.

pecl 명령줄 도구를 사용하여 설치:

pecl install memcache

또는 소스에서 직접 설치:

phpize

./configure

make

make install

2.

Windows Memcache설치:

1.

다운로드memcache windows 안정 버전인 경우 압축을 풀고 터미널의 c:memcached

와 같은 특정 디스크에 넣습니다(즉,

cmd 명령 인터페이스) 'c:memcachedmemcached.exe -d install'을 입력하여 3을 설치합니다. .

그런 다음 '

c:memcachedmemcached.exe -d start'를 입력하여 시작합니다. 참고: 앞으로는 memcachedwindows 전원을 켤 때마다 자동으로 시작됩니다. 이제 서버 측이 설치되었습니다. 4.

http://pecl4win.php.net/ext.php/php_memcache.dll을 다운로드하고 해당 항목을 찾으세요. 자신의 php 버전 5.

C:winntphp.ini 에 한 줄 추가 'extension=php_memcache.dll'6.

Apache 다시 시작 , 그리고 phpinfo를 확인하세요. memcache가 있으면 설치가 성공한 것입니다! 3. memcached

기본 설정: -p 리스닝 포트

-l 연결됨

IP주소, 기본값은 로컬 컴퓨터-d start 시작

memcached서비스-d restart 다시 시작

memcached서비스 -d stop|shutdown 실행 중인

memcached 서비스 종료 -d install 설치

memcached서비스-d uninstall 제거

memcached서비스-u

으로 실행(root)-m 최대 메모리 사용량, 단위

MB

. 기본값64MB-M 항목 삭제 대신 메모리 소진 시 오류 반환

-c 최대 동시 접속 수 , 기본값은

1024

-f 블록 크기 증가율입니다. 기본값은

1.25-n

입니다. space , 키+값+플래그기본값은 48-h 도움말 표시

4. php.ini

구성:[Memcache]

이미지, 비디오, 파일 및 데이터베이스를 포함한 다양한 형식의 데이터를 저장하는 데 사용할 수 있는 통합된 거대한 해시 테이블을 메모리에 유지하는 고성능 분산 메모리 개체 캐시 시스템입니다. 검색결과 등

오류 발생 시 다른 서버로 투명하게 장애 조치할지 여부.

memcache.allow_failover = On

데이터 수신 및 전송 시 시도할 최대 서버 수, memcache.allow_failover가 켜져 있는 경우에만 유효합니다. memcache.max_failover_attempts = 20

이 값에 설정된 블록 크기에 따라 데이터가 전송됩니다. 값이 작을수록 더 많은 추가 네트워크 트래픽이 필요합니다. 설명할 수 없는 속도 저하가 발견되면 이 값을 32768으로 늘려보세요.

memcache.chunk_size = 8192

memcached에 연결할 때 사용되는 기본 TCP 서버 포트.

memcache.default_port = 11211

서버에 매핑하는 전략을 제어합니다. 기본값 "standard"은 이전 버전의 hash 전략을 사용한다는 의미입니다.

"consistant"로 설정되어 서버를 다시 계산하지 않고도 연결 풀에 /을 추가할 수 있습니다.서버 간의 매핑 관계입니다.

memcache.hash_strategy = "standard";

서버의 매핑을 제어합니다. 해시 함수. 기본값 "crc32"CRC32 알고리즘을 사용하고, "fnv" FNV-1a 알고리즘을 사용함을 나타냅니다. FNV-1aCRC32보다 약간 느리지만 해싱 효과가 더 좋습니다.

memcache.hash_function = "crc32"

memcachesession,자세한 내용은 : memcache PHP session.save_handler를 참조하세요.

1. $memcache = new Memcache;

2. $memcache->connect('localhost', 11211) 또는 die("연결할 수 없음"); getVersion();

5. echo "서버 버전: ".$version."
n"

6.

7. $tmp_object = new stdClass;

8. $tmp_object->str_attr = 'test';

9. $tmp_object->int_attr = 123

10.

11. $memcache->set('key', $tmp_object, false, 10) 또는 die ("서버에 데이터를 저장하지 못했습니다.")

12. echo "데이터를 서버에 저장합니다. 캐시(데이터는 10초 후에 만료됨)
n";

13.

14. $get_result = $memcache->get( 'key');

15. echo "캐시 데이터:
n"

16.

17. var_dump($get_result);

memcache

를 구성했습니다. 이제

memcache.

디버깅하는 방법을 테스트해 보겠습니다. 먼저 테이블을 만듭니다. 테이블 t를 만듭니다(id char(36) not null 기본 키, 사용자 이름 varchar(20) not null);

일부 데이터를 삽입합니다.

t 값에 삽입 ​​(uuid(),'Livia'),(uuid(),'Lucy'),(uuid(),'Sivia'),(uuid(),'david' );

테스트할 간단한 스크립트를 작성해 보세요.

$host = '192.168.1.21:3306'; 

$user = '웹사용자'; 

$passwd = '123456'; 

$db = '테스트'; 

$conn = mysql_connect($host,$user,$passwd); 

mysql_select_db($db,$conn); 

$sql = 'ID 설명별 순서에서 * 선택'; 

$result = mysql_query($sql,$conn); 

동안 ($row = mysql_fetch_array($result,MYSQL_ASSOC)){ 

$test_key[] = $row; 

$sql = md5($sql); 

$mem = 새 Memcache; 

$mem->connect("192.168.1.21", 11211); 

$mem->set($sql,$test_key, MEMCACHE_COMPRESSED, 600);

print_r($mem->get($sql)); 

?>

  看看看结果来了。

C:>php -f "d:/lamp/web2/phpinfo.php" 

배열 

[0] => 배열 

[id] => d8f1ec2a-c033-11dd-bd1a- 002215c94322 

[사용자 이름] =>  david 

)

[1] =>  배열 

[id] =>  d8f1eb9e-c033-11dd-bd1a-002215c94322 

[사용자 이름] =>  Sivia 

)

[2] =>  배열 >( 

[id] => d8f1ea9a-c033-11dd-bd1a-002215c94322 

[사용자 이름] => Lucy 

)

[ 3] =>  배열 

[id] => d8f1e658-c033-11dd-bd1a-002215c94322 

[사용자 이름] => Livia 

)

)

现在我们已经介绍

Memcache

安装,不再赘述。再次着重介绍memcache 적의 한 가지 사용 방법.Memcache::add // 

添加一个值,如果已经存在,则返回

falseMemcache::addServer // 

添加

Memcache地址Memcache::close // 

关闭一个

Memcache적합Memcache::connect // 

打开一个到

Memcache적합 Memcache::감소 // 

对保存적 某个

中적值进行减法操작Memcache: :delete // 

删除一个

Memcache상위Memcache:: 플러시 // 

새로운 기능 있음

Memcache上保存的项目(类似于删除所有保存적项目)Memcache::get //

Memcache上获取一个Memcache::getExtendedStats // 

获取进程池中所有进程的运行系统统计

Memcache::getServerStatus // 

获取运行服务器的参数

Memcache::getStats //

获取当前

Memcache服务器运行的状态Memcache::getVersion // 

返回运行的

멤캐시 적 취향Memcache::increment // 

对保存적 某个

중적인 值进行加법操작Memcache::pconnect // 

打开一个到

Memcache적长连接Memcache:: 교체 // 

替换一个已经存재

Memcache服务器的项目(功能类似Memcache::set) Memcache::set // 

Memcache添加一个值,如果已经存재,则覆写Memcache ::setCompressThreshold // 

对大于某一大小적数据进行压缩

Memcache::setServerParams // 

현재 运行时修改服务器的参数

下面是一些简单의 응용법实例,仅供参考:

  

  $mem = new Memcache;

  $mem->connect("127.0 .0.1", 12000);

//Memcache::set 메소드에는 4개의 매개변수가 있습니다. 첫 번째 매개변수는 key이고, 두 번째 매개변수는 value, 세 번째 매개변수는 선택사항으로 압축하여 저장할지 여부를 나타냅니다. 네 번째 매개변수는 선택사항으로 만료 후 자동 파기 시간을 설정하는 데 사용됩니다.

$mem->set('test','123',0,60);

//Memcache::add

메서드의 함수와 Memcache::set 메소드는 유사하지만 차이점은 Memcache::add 메소드의 반환 값이 인 경우입니다. false - key가 이미 존재하며 Memcache::set 메소드가 이를 직접 덮어쓴다는 것을 나타냅니다. .

$mem->add('test','123',0,60);

//Memcache::get

메소드의 기능은 다음과 같습니다. key 값을 얻으려면 Memcache::get 메소드에 매개변수가 있습니다. 이는 key . $mem->get('test');//

출력은

'123'//Memcache입니다. :replace

메소드는 기존

를 덮어쓰는 것입니다. Memcache::replace 메소드에는 4개의 매개변수가 있습니다. Memcache::set 메소드와 동일한 기능입니다. $mem->replace('test','456',0,60);

//Memcache::delete

메서드의 기능은 다음과 같습니다.

값을 삭제하려면 Memcache::delete 메서드에 두 개의 매개변수가 있고 첫 번째 매개변수는 키를 나타냅니다. 두 번째 매개변수는 선택사항으로 삭제 지연 시간을 나타냅니다. $mem->delete('test',60);

?>

                         Xiao Chenghu

PHP 캐싱 애플리케이션: PHP MEMCACHE 상세 설명

2010-01-28 09:38:44 출처: 중국 웹마스터 사이트 종합 [대, 중, 소] 댓글: 0 이 글을 웨이보에 모아 공유합니다. >

스테이션 긴 트랜잭션(http://jy.chinaz.com)은 웹마스터의 수익 창출에 도움이 됩니다. 가상 호스트 평가 + IDC 탐색 = IDC123.COM

Memcache 함수 라이브러리는 PECL(PHP Extension Community Library)에 있습니다. , 주요 기능은 대용량 메모리 데이터를 위한 임시 저장 영역을 구축하는 것입니다. 분산 시 매우 효과적입니다. 그렇지 않으면 사용하지 않는 것이 좋습니다. 우분투에서 설치하고 실행한 후 오류 메시지가 나타납니다:


/usr/local/memcached/ bin/ memcached: 공유 라이브러리를 로드하는 동안 오류가 발생했습니다. libevent-1.4.so.2:
공유 개체 파일을 열 수 없습니다. 해당 파일이나 디렉터리가 없습니다.

"libeven, memcached, libmemcache 설치"의 방법을 따르고 다음을 사용합니다.


/usr/local/memcached/bin/memcached: error while loading shared libraries: libevent-1.4.so.2: 
cannot open shared object file: No such file or directory 

sudo ln - s /usr/local/lib/libevent-1.4.so.2 /usr/lib/libevent-1.4.so.2

sudo ln -s /usr/local/lib/libevent-1.4.so.2 /usr/lib/libevent-1.4.so.2

할 수 있음 이 버그를 수정하세요

Xindeli를 통해 php의 memcached 모듈을 설치하고, /etc/php5/conf.d/memcached.ini에서 ";" 등록을 취소하고, 아파치를 다시 시작하고, phpinfo()를 호출하여 memcached를 표시합니다. 정보.


$memcache = 새 Memcache- >connect('localhost', 11211) 또는 die ("연결할 수 없습니다.")
$version = $memcache->getVersion()
echo "서버 버전: ".$version."n "; 
?>


$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect");    
$version = $memcache->getVersion();    
echo "Server's version: ".$version."n";    
?>

1. 

2. $memcache = new Memcache;

3. $memcache->connect('localhost', 11211) or die ("Could not connect");    

4. print_r($memcache->getStats());    

5. /**   

6. * Array   

7. * (   

8. *     [pid] => 8052   

9. *     [uptime] => 9205   

10. *     [time] => 1205898428   

11. *     [version] => 1.2.5   

12. *     [pointer_size] => 32   

13. *     [rusage_user] => 0.008000   

14. *     [rusage_system] => 0.000000   

15. *     [curr_items] => 1   

16. *     [total_items] => 17   

17. *     [bytes] => 57   

18. *     [curr_connections] => 2   

19. *     [total_connections] => 15   

20. *     [connection_structures] => 3   

21. *     [cmd_get] => 9   

22. *     [cmd_set] => 23   

23. *     [get_hits] => 5   

24. *     [get_misses] => 4   

25. *     [evictions] => 0   

26. *     [bytes_read] => 671   

27. *     [bytes_written] => 850   

28. *     [limit_maxbytes] => 10485760   

29. *     [threads] => 1   

30. * )   

31. */    

32. ?>  


01.02.$memcache = new Memcache;
03.$memcache->connect('localhost', 11211) or die ("Could not connect"); 
04.$memcache->set( 'name', 'leo', 0, 30); 
05.if(!$memcache->add( 'name', 'susan', 0, 30)) 
06.{ 
07. echo 'susan is exist'; 
08.}; 
09.$memcache->replace( 'name', 'lion', 0, 300); 
10.echo $memcache->get( 'name'); 
11.$memcache->delete( 'name', 5); 
12.?> 


01.02.function _callback_memcache_failure($host, $port) {
03. print "memcache '$host:$port' failed";
04.}
05.$memcache = new Memcache;
06.$memcache->addServer('192.168.1.116', 11211); 
07.$memcache->setServerParams('192.168.1.116', 11211, 1, 15, true, 
08. 
09.'_callback_memcache_failure'); 
10.echo $memcache->getServerStatus('192.168.1.116', 11211); 
11.?> 

PHP 캐싱 애플리케이션: PHP MEMCACHE 상세 설명(2)

2010-01-28 09:38:44 출처: 중국 웹마스터 종합[대, 중, 소] 댓글: 0 기여하고 싶습니다. 이 기사를 즐겨찾기 웨이보에 공유

웹마스터 거래(http://jy.chinaz.com)는 웹마스터가 돈을 벌 수 있도록 도와줍니다. 가상 호스트 평가 + IDC 탐색 = IDC123.COM

memcached 서비스 정식 출시

이 라이브러리를 테스트하려면 객체 지향 접근 방식을 사용하는 것이 좋습니다.

Memcache::getVersion 메소드의 기능은 실행 중인 Memcache의 버전 정보를 반환하는 것입니다.

Memcache::getStats 메소드는 서버의 일부 실행 통계를 반환하는 데 사용됩니다. Memcache::getStats 메소드에는 세 가지 매개변수가 있습니다. 첫 번째 매개변수는 요청된 반환 유형을 나타냅니다. 재설정, malloc, slabs, 항목, 두 번째 매개변수와 세 번째 매개변수는 첫 번째 매개변수에 설정됩니다. Memcache::getExtendedStats 메소드는 프로세스 풀에 있는 모든 프로세스의 실행 중인 시스템 통계를 얻는 데 사용됩니다.

memcache_debug() 함수는 디버깅 기능을 제어하는 ​​데 사용됩니다. 전제는 PHP가 컴파일될 때 –enable-debug 옵션이 사용된다는 것입니다. 그렇지 않으면 이 함수는 아무런 효과가 없습니다.

Memcache::addServer 메소드는 사용할 수 있는 서버 주소를 추가하는 데 사용됩니다. Memcache::addServer 메소드에는 첫 번째 매개변수를 제외하고 나머지는 선택사항입니다. 는 서버의 주소, 두 번째 매개변수는 포트, 세 번째 매개변수는 지속 연결 여부, 네 번째 매개변수는 모든 서버 중 해당 서버의 가중치, 다섯 번째 매개변수는 연결 지속 시간을 나타냅니다. 6번째 매개변수는 연결 재시도 간격을 나타냅니다. 기본값은 15입니다. 7번째 매개변수는 서버의 온라인 상태를 제어하는 ​​데 사용됩니다. 오류 메시지.

Memcache::setServerParams 메소드는 런타임 시 서버의 매개변수를 수정하는 데 사용됩니다. Memcache::setServerParams 메소드에는 6개의 매개변수가 있으며 Memcache::addServer 메소드에는 세 번째 및 네 번째 매개변수가 없습니다. Memcache::getServerStatus 메소드는 실행 중인 서버의 매개변수를 가져오는 데 사용됩니다. 두 매개변수는 각각 주소와 포트를 나타냅니다.

Memcache::flush 메소드의 기능은 캐시된 데이터를 모두 지우는 것이지만 사용된 메모리 공간을 줄이지는 않습니다.

Memcache::increment 메서드는 저장된 키에 값을 더하는 데 사용되고, Memcache::decremen 메서드는 저장된 키에 있는 값을 빼는 데 사용됩니다.

PHP MEMCACHE 고급 캐싱 애플리케이션에 대한 자세한 설명 기사 항목: 7747.Net 담당 편집자: 7747.Net 269

[글꼴: Small Large]


01.02.$memcache = new Memcache;
03.$memcache->connect('localhost', 11211); 
04.$memcache->set('test_item', 8); 
05.$memcache->increment('test_item', 4); 
06.echo $memcache->decrement('test_item', 7); 
07.// 显示 5 
08.?> 


01.02.$memcache = 새로운 Memcache
03.$memcache->connect(' localhost' , 11211);
04.$memcache->set('test_item', 8)
05.$memcache->increment('test_item', 4); $memcache ->decrement('test_item', 7)
07.// 5
08.?> 표시

Memcache 함수 라이브러리는 PECL(PHP Extension Community Library)에 있습니다. 주요 기능은 대용량 메모리 데이터를 위한 임시 저장 영역을 구축하는 것입니다. Ubuntu에

을(를) 설치했을 때 실행을 마쳤을 때 오류가 발생했습니다.

/usr/local/memcached/bin/memcached: 공유 라이브러리를 로드하는 동안 오류가 발생했습니다: libevent-1.4.so.2:


공유 객체 파일을 열 수 없습니다. 해당 파일이나 디렉터리가 없습니다

"libeven, memcached, libmemcache 설치"의 방법을 따르세요.

sudo ln -s /를 사용하세요. usr/local/lib /libevent-1.4.so.2 /usr/lib/libevent-1.4.so.2

이 버그를 수정할 수 있습니다


Xindeli를 통해 PHP의 memcached 모듈을 설치하고 로그아웃합니다. .d/memcached.ini의 /etc/php5/conf ";", Apache 다시 시작

, phpinfo()를 호출하여 memcached 정보 표시

실행:

< ;?php

$memcache = new Memcache;

$memcache->connect('localhost', 11211) 또는 die("연결할 수 없습니다.")
$version = $memcache->getVersion ();
echo "서버 버전: ".$version."
n"?>
$memcache = new
$memcache; ->connect(' localhost', 11211) 또는 die("연결할 수 없습니다.")
print_r($memcache->getStats())
/** 
* 배열 
* ( 
*     [pid] => 8052 
*     [가동 시간] => 9205 
*     [시간] => 1205898428 
*     [버전] =>  1.2.5 
*     [pointer_size] =>  32 
*     [rusage_user] =>  0.008000 
*     [rusage_system] =>  0.000000 
*     [curr_items] => 1
*     [total_items] =>  17 
*     [바이트] =>  57 
*     [curr_connections] =>  2 
*     [total_connections] => 15 
*     [연결_구조 ] =>  3 
*     [cmd_get] => 9 
*     [cmd_set] =>  23 
*     [get_hits] => 5 
*     [get_misses] => *     [스레드] =>  1 
* ) 
*/
?>
$memcache = new Memcache;
$memcache->connect('localhost', 11211) 또는 die("연결할 수 없습니다."); ->set( '이름', '레오', 0, 30)
if(!$memcache->add( '이름', '수잔', 0, 30))
{
echo '수잔은 존재합니다';
$memcache->replace( 'name', 'lion', 0, 300)
echo $memcache->get( 'name' );
$ memcache->delete( 'name', 5);
function _callback_memcache_failure($host, $port) {
인쇄 " memcache '$host:$ port' failed";
}
$memcache = new Memcache;
$memcache->addServer('192.168.1.116', 11211);
$memcache-> ;setServerParams('192.168.1.116', 11211, 1, 15, true,
'_callback_memcache_failure')
echo $memcache->getServerStatus('192.168.1.116', 11211); ;
< ?php
$memcache = new Memcache
$memcache->connect('localhost', 11211)
$memcache->set('test_item', 8) ;
$memcache ->increment('test_item', 4);
echo $memcache->decrement('test_item', 7)// 표시 5
? 🎜>

/usr/local/bin/memcached -d -m 10 -u root -l 127.0.0.1 -p 11211 -c 256 -P
/tmp/memcached.pid
memcached 서비스 정식 시작

Memcache::add — 값을 추가하고 이미 존재하는 경우 false를 반환합니다.
Memcache::addServer — 사용할 서버 주소 추가
Memcache::close — Memcache 객체 닫기
Memcache::connect — Memcache 객체 생성
memcache_debug — 디버깅 기능 제어
Memcache::decrement — 저장된 키에서 값 빼기
Memcache::delete — 키 삭제 값
Memcache ::flush — 캐시된 데이터 모두 지우기
Memcache::get — 키 값 가져오기
Memcache::getExtendedStats — 프로세스 풀에 있는 모든 프로세스의 실행 중인 시스템 통계 가져오기
Memcache:: getServerStatus — 가져오기 실행 중인 서버의 매개변수
Memcache::getStats — 서버의 일부 실행 통계를 반환합니다.
Memcache::getVersion — 실행 중인 Memcache의 버전 정보를 반환합니다.
Memcache::increment — 저장된 값을 추가합니다. 키
Memcache::pconnect — Memcache 영구 연결 개체 생성
Memcache::replace — R 기존 키 덮어쓰기
Memcache::set — 값 추가(이미 존재하는 경우 덮어쓰기)
Memcache::setCompressThreshold - 특정 크기보다 큰 데이터 압축 Memcache::setServerParams - 런타임 시 서버 매개변수 수정

이 라이브러리를 테스트하려면 객체 지향 방법을 사용하는 것이 좋습니다.

Memcache::getVersion 메소드는 실행 중인 Memcache의 버전 정보를 반환하는 데 사용됩니다.

Memcache::getStats 메소드는 서버의 일부 실행 통계를 반환하는 데 사용됩니다. Memcache::getStats 메소드에는

세 가지 매개변수가 있습니다. 첫 번째 매개변수는 요청된 반환 유형을 나타냅니다. 재설정, malloc, 맵, 항목, 크기는 두 번째

매개변수입니다. 세 번째 매개변수는 첫 번째 매개변수가 "cachedump"로 설정된 경우 사용됩니다. Memcache::getExtendedStats 메소드의

기능은 프로세스 풀에 있는 모든 프로세스의 실행 중인 시스템 통계를 얻는 것입니다.

Memcache::connect 메소드는 Memcache 객체를 생성하는 데 사용됩니다. Memcache::pconnect 메소드는

Memcache 영구 연결 객체를 생성하는 데 사용됩니다. Memcache::close 메소드는 Memcache 객체를 닫는 데 사용됩니다.

Memcache::set 메소드의 기능은 값을 추가하는 것입니다. Memcache::set 메소드에는 4개의 매개변수가 있습니다. 두 번째 매개변수는

값입니다. . 압축 및 저장 여부를 나타내는 세 개의 매개변수는 선택사항이며, 네 번째 매개변수는 만료 후 자동 파기 시간을 설정하는 데 사용됩니다

. Memcache::add 메소드는 Memcache::set 메소드와 유사합니다. 차이점은 Memcache::add 메소드의 반환 값이

false이면 키가 이미 존재한다는 것입니다. Memcache::set 메소드는 직접 덮어씁니다. Memcache::get 메소드의 기능은

의 키 값을 얻는 것입니다. Memcache::get 메소드에는 키를 나타내는 매개변수가 있습니다. Memcache::replace 메소드는 기존

키를 덮어쓰는 데 사용됩니다. Memcache::replace 메소드에는 4개의 매개변수가 있으며 Memcache::set 메소드와 동일한 기능을 갖습니다.

Memcache::delete 메소드의 기능은 키 값을 삭제하는 것입니다. Memcache::delete 메소드에는 두 개의 매개변수가 있습니다. 첫 번째 매개변수는 키

를 나타내고 두 번째 매개변수는 선택사항입니다. 삭제 지연 시간을 나타냅니다.


php가 컴파일될 때 –enable-debug 옵션이 사용된다면 memcache_debug() 함수는 디버깅 기능을 제어하는 ​​데 사용됩니다. 그렇지 않으면

이 함수는 디버깅 기능을 갖지 않습니다. 효과.

Memcache::addServer 메소드의 기능은 사용할 수 있는 서버 주소를 추가하는 것입니다. Memcache::addServer 메소드에는

8개의 매개변수가 있습니다. Optional이며 첫 번째 매개변수는 서버의 주소, 두 번째 매개변수는 포트, 세 번째

매개변수는 영구 연결 여부, 네 번째 매개변수는 모든 서버 중 이 서버의 위치를 ​​나타냅니다. 연결 가중치, 다섯 번째 매개변수 테이블

은 연결 기간을 나타내고, 여섯 번째 매개변수는 연결 재시도 간격을 나타내며, 기본값은 15이며, -1로 설정하면 재시도가 없음을 의미하고, 일곱 번째 매개변수는

매개변수는 서버의 온라인 상태를 제어하는 ​​데 사용됩니다. 8번째 매개변수를 사용하면 오류 메시지를 처리하는 대체 기능을 설정할 수 있습니다.
Memcache::setServerParams 메소드는 런타임 시 서버의 매개변수를 수정하는 데 사용됩니다. Memcache::setServerParams 메소드

에는 6개의 매개변수가 있으며 Memcache::addServer 메소드에는 세 번째와 네 번째 매개변수가 없습니다. 매개변수. Memcache::getServerStatus 메소드

는 실행 중인 서버의 매개변수를 가져오는 데 사용됩니다. 두 매개변수는 각각 주소와 포트를 나타냅니다.
Memcache::flush 메소드는 캐시된 데이터를 모두 지우는 데 사용되지만 사용된 메모리 공간을 줄이지는 않습니다.

Memcache::increment 메서드는 저장된 키에 값을 추가하는 데 사용되고 Memcache::decremen 메서드는 저장된 키에서 값을 빼는 데 사용됩니다.

Discuz!의 Memcache 캐시 구현

서문:
PHP+MySQL 아키텍처 사이트에서 이 기사는 MySQL의 관점에서 Discuz! 포럼(또는 유사한 PHP+MySQL 아키텍처 프로그램)이 대규모 방문에 대처할 수 있는 방법을 분석하는 데 중점을 둡니다. 동시에 Memcache를 사용하여 MySQL에 대한 부담을 줄이는 방법에 대한 몇 가지 제안이 제공됩니다. 대부분의 데이터는 개인적인 테스트 결과입니다. 의견이 다른 경우 메시지를 남겨주세요. 게다가 개인적인 생각의 문제로 글이 좀 엉성해서 이렇게 선언합니다!
시스템 분석:
간단히 말해서 MySQL의 관점에서 보면 단일 MySQL 데이터베이스를 하루에 수억 건의 작업(초당 약 1100건의 MySQL 작업에 86400을 곱함)으로 로드하는 것은 그리 어렵지 않을 것입니다. . 이 데이터에 따르면 단일 MySQL 서버를 갖춘 포럼이 2천만 PV를 달성하는 것은 문제가 되지 않습니다. 대부분의 국내 포럼은 하루 2천만 PV를 달성할 수 없다고 생각하지만 실제 상황은 그렇지 않습니다. 포럼의 PV가 100만을 초과하면 WEB은 이미 압도됩니다.
제가 가지고 있는 일부 데이터에 따르면 현재 Discuz! Forum의 기본 서버 아키텍처는 전면에는 Squid, 후면에는 DB가 지원됩니다. 이 아키텍처에서는 서버를 병렬로 추가하면 웹 서버에 대한 증가된 부담을 해결할 수 있지만 MySQL에 대한 부담은 풀 곳이 없습니다. 공식 MySQL 서비스를 고려하지 않고도 합리적으로 사용하면 MySQL 서버의 부하를 줄일 수 있습니다. 멤캐시.
어떤 친구들은 데이터 테이블을 분할할 수 있다고 말할 수도 있지만(참고: 여기서 분할한다는 것은 pw, dv와 같은 PHP 프로그램을 통해 테이블을 분할하는 것을 의미합니다), 현재 상황은 DB 서버에서 더 이상 현재 데이터를 지원할 수 없습니다. PHP를 통해 MySQL 테이블을 처리하고 분할하는 것은 여전히 ​​MySQL의 로드를 줄일 수 없습니다. (참고: 이 문단은 이미 형성된 시스템에 대한 것입니다. 독립적으로 개발된 시스템이라면 아키텍처 초기 단계에서 데이터 파티셔닝을 동기화하는 것이 좋습니다.)
어떤 친구들은 MySQL의 마스터-슬레이브를 사용하라고 말할 수도 있습니다. 이 질문을 하시면 제가 아주 명확하게 말씀드릴 테니 돌아가서 매뉴얼을 읽어보세요. Mysql 마스터/슬레이브 모드에서 슬레이브는 주로 데이터 백업에 사용되며, 마스터에 장애가 발생한 경우에만 슬레이브가 마스터의 서비스를 이어받아 마스터가 정상으로 돌아올 때까지 외부 요청을 처리합니다. 즉, 마스터/슬레이브에서는 마스터가 서비스를 제공하거나 슬레이브가 서비스를 제공하며, 마스터/슬레이브는 동시에 서비스를 제공하지 않습니다. MySQL 마스터-슬레이브를 사용하면 여전히 MySQL 로드를 효과적으로 줄일 수 없습니다.
아마 왜 MySQL Cluster를 사용하지 않느냐고 물으실 겁니다. 같은 비용을 들여서 최대한의 이익을 얻는 것이 돈 낭비입니다. 추신: 여담을 만들기 위해 MySQL 매뉴얼에서는 MySQL 클러스터를 MySQL 클러스터로 설명하는데, 이는 익숙하지 않습니다.
사실 MySQL 5.1의 MySQL 파티션은 어떤 크기로든 설정할 수 있는 규칙에 따라 단일 테이블의 여러 부분을 파일 시스템에 할당할 수 있다는 점에서 매우 좋습니다. 실제로 테이블의 서로 다른 부분은 서로 다른 위치에 별도의 테이블로 저장됩니다. 현재 상황에서 MySQL 부하를 줄이기 위한 가장 적극적이고 효과적인 솔루션 중 하나라고 생각합니다. 하지만 아쉽게도 저는 이 MySQL 파티셔닝 방식을 직접 사용해본 경험이 없고, 안정적이거나 불안정하다는 점을 입증할 충분한 사례도 없습니다. 그래서 나는 아직도 방황하고 있다. 알고 계시다면 알려주세요! 몇몇 친구들은 Tencent가 MySQL 파티셔닝을 사용하고 있다고 말했지만 안타깝게도 정확한 데이터를 얻지 못했습니다.
MySQL 부하를 줄이기 위한 수많은 방법과 사용자 환경 요구 사항 등 특정 조건에서 분석하고 요약한 결과, 현재 상황에서는 Discuz의 MySQL 부하를 완화하는 것이 더 효과적인 방법이라는 결론에 도달했습니다! 포럼은 Memcache를 사용하는 것입니다!
Memcache를 사용하는 이유:
1. 웹 서버(Lighttpd 및 Nginx는 Apache보다 훨씬 효율적이라고 합니다. 사용해 볼 수 있음)는 CPU 요구 사항이 높고 메모리 요구 사항이 낮지만 Memcached 서버는 CPU가 낮습니다. 요구 사항 은 메모리 요구 사항이 높기 때문에 함께 사용할 수 있습니다. 프런트 엔드 웹 서버에 Memcached Server를 설치하는 것이 가능합니다.
2. 돈, 돈, 돈, 최소한의 노력, 최대의 이익.
3. 합리적인 아키텍처를 갖춘 시스템의 경우 Memcache 지원을 추가하는 것은 파일을 일괄 처리하는 과정일 수 있습니다.
Memcache를 사용하세요
1.
$memcachehost = '127.0.0.1';
$memcacheport = 11211;
$memcachelife = 60
2.include/common.inc.php
$mem = new Memcache ;
$mem->connect($memcachehost, $memcacheport);
3. include/db_mysql.class.php에서 fetch_array 및 query 메소드를 수정하고 query_mysql 메소드를 추가합니다. 🎜>function fetch_array($query, $result_type = MYSQL_ASSOC) {
return is_resource($query) ? mysql_fetch_array($query, $result_type) :
}
function query_memcache($ sql, $type = '') {
global $mem,$memcachelife;
$key = md5($sql)
if(!($query = $mem->get($key) ))) {
$query = $this->query($sql, $type)
while($item = $this->fetch_array($query)) {
$res[ ] = $item;
}
$res;
$mem->set($key, $query, 0, $memcachelife)
}
return $query ;
}
함수 쿼리($sql, $type = '') {
global $debug, $discuz_starttime, $sqldebug, $sqlspenttimes
$func = $type == 'UNBUFFERED' && @function_exists('mysql_unbuffered_query') ?
'mysql_unbuffered_query' : 'mysql_query'
if(!($query = $func($sql, $this->link)) && $type != ' SILENT') {
$this->halt('MySQL 쿼리 오류', $sql)
}
if(substr($sql, 0, 6) == 'SELECT') {
echo '캐시 SQL:'.$sql.'
';
} else {
echo '플래시 SQL:'.$sql.'
'
}
$this->querynum++;
return $query; to
$db->query_memcache(
참고 및 변경
while($post = $db->fetch_array($query)) {
to
foreach($query as $ post ) {
while이 없는 $db->fetch_array는 수정할 필요가 없습니다.
유용하다면 다음 코드를 사용하세요.
preg_replace("/while


[수학 처리 오류]
)/is", "foreach($query as $ \ 1)", $file);
나중에 작은 도구를 출시하고 일괄적으로 교체하면 됩니다. 은 EditPlus에서 다음과 같이 대체될 수 있습니다. while[수학 처리 오류]
)는 foreach($query as $1)
으로 대체됩니다. 5 완료, 테스트해 보세요! ~ 참고 자료: Memcached에 대해 궁금한 친구는 다음 문서를 참조할 수 있습니다. Linux에서 Memcache 설치: http://www.ccvita.com/index.php/257.html Windows에서 Memcache 설치: http://www.ccvita.com/index.php/258.html
Memcache 기본 튜토리얼: http://www.ccvita.com/index.php/259.html
Discuz!의 Memcache 캐시 구현: http://www.ccvita.com/index.php/261.html


이상에서는 Memcache를 사용한 PHP 디버깅 방법의 소개와 적용에 대해 소개했으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿