php教程 PHP开发 PHP 메모리 캐시 가속 기능 memcached 설치 및 사용법

PHP 메모리 캐시 가속 기능 memcached 설치 및 사용법

Dec 30, 2016 pm 01:27 PM

1. memcached 소개 memcached라는 이름을 많이 듣게 되지만, 많은 학생들은 memcached라는 이름을 들어본 적도 없고 실제로 사용해 본 적도 없고 아주 좋은 것이라는 것만 알고 있습니다. 다음은 간략한 소개입니다. memcached는 주로 WEB 동적 애플리케이션을 가속화하는 데 사용되는 효율적이고 빠른 분산 메모리 개체 캐싱 시스템입니다. 2. Memcached 설치 첫 번째 단계는 memcached를 다운로드하는 것입니다. 최신 버전은 1.1.12입니다. 공식 웹사이트에서 memcached-1.1.12.tar.gz를 직접 다운로드할 수 있습니다. 게다가 memcached는 libevent를 사용하는데 저는 libevent-1.1a.tar.gz를 다운로드했습니다. 다음 단계는 각각 libevent-1.1a.tar.gz 및 memcached-1.1.12.tar.gz의 압축을 풀고 컴파일하고 설치하는 것입니다. # tar -xzf libevent-1.1a.tar.gz
# cd libevent- 1.1 a
# ./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는 데몬 모드에서 memcached를 실행합니다.
-m은 memcached가 사용할 수 있는 메모리 크기를 설정합니다.
-l은 수신 IP 주소, 로컬 머신인 경우 일반적으로 이 매개변수를 설정할 필요가 없습니다.
-p는 수신 포트를 설정하고 기본값은 11211이므로 이 매개변수를 설정할 필요가 없습니다. u는 사용자를 지정합니다. 현재 루트인 경우 이 매개변수를 사용하여 사용자를 지정해야 합니다. 물론, 사용할 수 있는 다른 매개변수도 있습니다. man memcached를 실행하면 해당 매개변수를 볼 수 있습니다. 4. memcached의 작동 원리: 첫째, memcached는 하나 이상의 서버에서 데몬으로 실행되며 언제든지 클라이언트 연결 작업을 허용합니다. 현재 알려진 클라이언트 API에는 Perl/PHP/Python/Ruby가 포함됩니다. /자바/C#/C 등 PHP와 같은 클라이언트가 memcached 서비스와 연결을 설정한 후 다음으로 해야 할 일은 개체에 액세스하는 것입니다. 액세스된 각 개체에는 고유한 식별자 키가 있습니다. 액세스 작업은 이 키를 통해 수행되고 memcached에 있는 개체는 실제로 메모리에 저장됩니다. , 캐시 파일에 저장되지 않으므로 memcached가 매우 효율적이고 빠를 수 있습니다. 이러한 개체는 영구적이지 않으며 서비스가 중지되면 내부 데이터가 손실됩니다. 3. PHP를 memcached 클라이언트로 사용하는 방법 PHP를 memcached 클라이언트로 사용하여 객체 액세스 작업을 위해 memcached 서비스를 호출하는 방법에는 두 가지가 있습니다. 먼저, PHP에는 memcache라는 확장 기능이 있습니다. Linux에서 컴파일할 때 –enable-memcache[=DIR] 옵션을 가져와야 합니다. Windows에서는 php.ini에서 php_memcache.dll 앞의 주석을 제거해야 사용할 수 있습니다. 그 외에도 확장 및 재컴파일로 인한 문제를 피하는 또 다른 방법이 있는데, 바로 php-memcached-client를 직접 사용하는 것입니다. 이 기사에서는 두 번째 방법을 선택합니다. 확장 라이브러리에 비해 효율성은 약간 떨어지지만 큰 문제는 아닙니다. 4. PHP memcached 애플리케이션 예시 먼저 memcached-client.php를 다운로드한다. memcached-client.php를 다운로드한 후, 이 파일에 있는 "memcached" 클래스를 통해 memcached 서비스를 운용할 수 있다. 실제로 사용되는 코드 호출은 매우 간단합니다. add(), get(), replacement() 및 delete() 메소드 설명은 다음과 같습니다. add ($key, $val, $exp = 0 )
Memcached에 객체를 작성하세요. $key는 객체의 고유 식별자입니다. $val은 만료 시간(초)입니다.
from memcached 객체의 고유 식별자 $key에서 객체 데이터를 얻습니다. 교체($key, $value, $exp=0)
$value를 사용하여 객체 콘텐츠를 memcached의 식별자 $key로 바꿉니다. add( ) 메소드와 동일합니다. $key 객체가 존재하는 경우에만 작동합니다. delete ($key, $time = 0)
memcached에서 $key 식별자를 가진 객체를 삭제합니다. $time은 삭제를 나타내는 선택적 매개변수입니다. 대기 시간입니다. 다음은 식별자가 'mykey'인 개체 데이터에 대한 액세스 작업을 수행하는 간단한 테스트 코드입니다.

// 包含 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); 
?>
로그인 후 복사
실제 응용 프로그램에서는 일반적으로 데이터베이스를 쿼리합니다. memcached에 저장되며 다음에 데이터베이스 쿼리 작업을 수행하지 않고 액세스할 때 memcached에서 직접 가져올 수 있습니다. 이렇게 하면 데이터베이스에 대한 부담을 크게 줄일 수 있습니다. 일반적으로 SQL 문 md5() 뒤의 값이 고유 식별자 키로 사용됩니다. 다음은 memcached를 사용하여 데이터베이스 쿼리 결과 집합을 캐시하는 예입니다(이 코드 조각은 위의 예 코드를 따릅니다).

$sql = 'SELECT * FROM users'; 
$key = md5($sql); //memcached 对象标识符 
{ 
// 在 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); 
{ 
echo "n".str_pad('Read datas from memcached.', 60, '_')."n"; 
} 
var_dump($datas); 
?>
로그인 후 복사

可以看出,使用 memcached 之后,可以减少数据库连接、查询操作,数据库负载下来了,脚本的运行速度也提高了。之前我曾经写过一篇名为《PHP 实现多服务器共享 SESSION 数据》文章,文中的 SESSION 是使用数据库保存的,在并发访问量大的时候,服务器的负载会很大,经常会超出 MySQL 最大连接数,利用 memcached,我们可以很好地解决这个问题,工作原理如下: 
用户访问网页时,查看 memcached 中是否有当前用户的 SESSION 数据,使用 session_id() 作为唯一标识符;如果数据存在,则直接返回,如果不存在,再进行数据库连接,获取 SESSION 数据,并将此数据保存到 memcached 中,供下次使用; 
当前的 PHP 运行结束(或使用了 session_write_close())时,会调用 My_Sess::write() 方法,将数据写入数据库,这样的话,每次仍然会有数据库操作,对于这个方法,也需要进行优化。使用一个全局变量,记录用户进入页面时的 SESSION 数据,然后在 write() 方法内比较此数据与想要写入的 SESSION 数据是否相同,不同才进行数据库连接、写入数据库,同时将 memcached 中对应的对象删除,如果相同的话,则表示 SESSION 数据未改变,那么就可以不做任何操作,直接返回了; 
那么用户 SESSION 过期时间怎么解决呢?记得 memcached 的 add() 方法有个过期时间参数 $exp 吗?把这个参数值设置成小于 SESSION 最大存活时间即可。另外别忘了给那些一直在线的用户延续 SESSION 时长,这个可以在 write() 方法中解决,通过判断时间,符合条件则更新数据库数据。

更多PHP 内存缓存加速功能memcached安装与用法相关文章请关注PHP中文网!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)