> 백엔드 개발 > PHP 튜토리얼 > 멤캐시 소개

멤캐시 소개

巴扎黑
풀어 주다: 2023-03-14 10:24:01
원래의
1657명이 탐색했습니다.

memcached는 고성능 분산 메모리 캐시 서버입니다. 외국인 커뮤니티 웹사이트 LIVEJOURNAL 개발팀이 개발한 작품입니다.

사용 목적:

동적 웹 애플리케이션의 속도와 확장성을 높이기 위해 데이터베이스 쿼리 결과를 캐싱하여 데이터베이스 액세스 횟수를 줄입니다.

memcache는 무료 오픈 소스, 고성능, 분산 메모리 객체 캐싱 시스템입니다. 동적 웹 애플리케이션을 가속화하고 데이터베이스 부하를 줄이는 데 사용됩니다.

memcahce의 특징

1. C/S 아키텍처 기반, 간단한 프로토콜

2. libevent 이벤트 처리 기반 {libevent는 Windows, Linux, bsd(파생품)에 적합한 이벤트 트리거 기반 네트워크 라이브러리입니다. of Unix System) 및 기타 플랫폼}

3. 내장 메모리 저장 방법

4. 클라이언트 기반 memcached 배포

적용 가능한 시나리오

1. 분산 배포가 필요한 경우: 작업에 하위가 10개 있는 경우 - 태스크, 이 10개의 하위 태스크를 10개의 서버에 별도로 배치하면 태스크 실행 시간이 크게 단축됩니다.)

2. 동일한 데이터에 자주 액세스해야 합니다

3. 데이터 공유가 필요한 경우

C/S 아키텍처 소개

설치 시작(PDF 문서 참조)

다양한 명령어 사용

set/add/replace/delete/get/gets/cas/stats/stats items/append/prepend/flush_all 등

memcahced 일부 기능 및 제한 사항

① 메모리가 충분하다면 Memcached에 저장할 수 있는 항목 데이터의 양에는 제한이 없습니다.

② 단일 Memcached 프로세스에서 사용하는 최대 메모리는 2G입니다. 여러 포트에서 여러 Memcached 프로세스 열기

3 최대 데이터 만료 시간은 30일입니다. 영구로 설정하면 이 시간에도 만료됩니다. 상수 REALTIME_MAXDELTA

40*60*24*30은 최대 키 길이를 제어합니다.

⑤ 이 길이보다 크면 저장할 수 없습니다. 상수 KEY_MAX_LENGTH 250으로 제어됩니다.

⑥단일 항목의 최대 데이터는 1MB를 초과하면 저장되지 않습니다. 상수 POWER_BLOCK 1048576.

7기본 슬래브 크기입니다

8최대 동시 연결 수는 200입니다. conn_init()를 통해 freetotal로 제어되며 최대 소프트 연결 수는 1024이며

9settings.maxconns=1024로 제어됩니다. ⑩매개변수 공간 점유 관련: settings.factor=1.25, settings.chunk_size=48, 이는 슬랩의 데이터 점유 및 스테핑 방법에 영향을 미칩니다.

PHP Memcache 클라이언트의 모든 메소드 요약

Memcache 기능의 모든 메소드 목록
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 - 기존 키 덮어쓰기
Memcache: :set - 값을 추가하고 이미 존재하는 경우 덮어씁니다.
Memcache::setCompressThreshold – 특정 크기보다 큰 데이터를 압축합니다.
Memcache::setServerParams – 런타임 시 서버 매개변수 수정

PHP의 Memcache 작업 방법 분해

Memcache::add 사용법

코드는 다음과 같습니다:
bool Memcache::add ( string $key , Mixed $var [, int $flag [, int $expire ]] )



참고:
$key가 없으면 이 함수를 사용하여 $var 값을 저장합니다. 기능적으로 동등한 함수는 memcache_add()입니다.

매개변수:
$key: 저장할 키 값입니다.
$var: 저장된 값, 문자 유형 및 정수 유형은 원래 값으로 저장되며, 다른 유형은 자동으로 직렬화되어 나중에 저장됩니다.
$flag: 저장된 값을 압축하기 위해 MEMCACHE_COMPRESSED를 사용할지 여부. true는 압축을 의미하고 false는 압축하지 않음을 의미합니다.
$expire: 저장된 값의 만료 시간입니다. 0이면 만료되지 않는다는 의미입니다. 지금부터의 시간을 유닉스 타임스탬프나 설명을 사용하여 표현할 수 있지만 초를 사용하여 표현해야 합니다. 2592000초(30일을 의미)를 초과할 수 없습니다.

반환 값:
성공하면 TRUE, 실패하면 FALSE. $key 값이 이미 존재하는 경우 FALSE가 반환됩니다. 다른 경우에는 Memcache::add()의 사용법이 Memcache::set()과 유사합니다.
예:

코드는 다음과 같습니다.

$memcache_obj = memcache_connect("localhost", 11211);
memcache_add($memcache_obj, 'var_key', '테스트 변수', false, 30); , '테스트 변수', false, 30);
?>




Memcache::addServer 사용법

코드는 다음과 같습니다.
bool Memcache::addServer ( string $host [, int $port [ , bool $percious [, int $weight [, int $timeout [, int $retry_interval [, bool $status [, callback $failure_callback ]]]]] )


지침:
사용 가능한 서버 주소가 연결 풀에 추가되고 Memcache::addServer로 연결이 열립니다. 스크립트가 실행된 후 자동으로 닫히거나 Memcache::close()로 수동으로 닫을 수 있습니다. 동일한 함수가 memcache_add_server()입니다.
이 방법을 사용하면(Memcache::connect() 및 Memcache::pconnect() 방법과 비교) 필요할 때만 네트워크 연결이 설정되므로 연결 풀에 많은 서버를 추가해도 네트워크 연결이 늘어나지 않습니다. 많은 서버가 사용되지 않을 수 있으므로 부담이 됩니다.
이 방법을 실행하는 모든 단계에서 오류 복구가 발생합니다. 다른 서버가 정상이라면 사용자는 이러한 연결 요청 실패를 알 수 없습니다. 모든 종류의 소켓 또는 Memcached 서버 수준 오류로 인해 장애 조치가 발생할 수 있습니다. 기존 키 추가와 같은 일반적인 클라이언트 오류는 장애 조치를 트리거하지 않습니다.

매개변수:
$host 서버 주소
$port 서버 포트
$pertant가 지속적인 연결인지 여부
$weight 모든 서버 중에서 이 서버의 가중치
$timeout 연결 기간
$retry_interval 연결 재시도 간격, 기본값은 15이고 -1로 설정하면 재시도가 없음을 의미합니다.
$status는 서버의 온라인 상태를 제어합니다.
$failure_callback을 사용하면 오류 메시지를 처리하기 위한 대체 기능을 설정할 수 있습니다.

반환 값:
성공하면 TRUE, 실패하면 FALSE.

예:

코드는 다음과 같습니다.
$memcache = new Memcache;
$memcache->addServer('memcache_host', 11211);
$memcache->addServer('memcache_host2) ', 1121 1 );

$memcache_obj = memcache_connect('memcache_host', 11211);
memcache_add_server($memcache_obj, 'memcache_host2', 11211)

bool Mem 캐시:: 닫기(무효)


설명:
Memcache 서버 연결을 닫습니다. 이 기능은 긴 연결을 닫지 않습니다. 긴 연결은 웹 서버가 종료되거나 다시 시작될 때만 닫힙니다. 동일한 함수 memcache_close() 반환 값: 성공하면 TRUE를 반환하고, 실패하면 FALSE를 반환합니다.
예:



코드는 다음과 같습니다.


$memcache_obj = memcache_connect('memcache_host', 11211);
memcache_close($memcache_obj)

$memcache_obj = 새로운 멤캐시
$memcache_obj -> connect('memcache_host', 11211); $memcache_obj->close();

?>




Memcache::connect 사용법

코드는 다음과 같습니다. ::connect ( string $host [, int $port [, int $timeout ]] )


지침:
memcached 서버 연결을 열고 Memcache::connect로 열린 연결을 설정합니다. 스크립트가 실행된 후 자동으로 닫힙니다. Memcache::close()를 사용하여 연결을 닫을 수도 있습니다. 동일한 함수가 memcache_connect()입니다.

매개변수:
$host: memcached가 수신 대기 중인 링크의 호스트를 가리킵니다. 이 매개변수에는 unix 도메인 이름 소켓을 사용하는 또 다른 특수 연결 방법 unix:///path/to/memcached.sock이 있습니다. case
$port: memcached가 수신 대기 중인 링크를 가리키는 포트입니다. unix 도메인 이름 소켓의 경우 포트는 0으로 설정되어야 합니다.
$timeout: 데몬에 연결하는 데 사용되는 시간(초) 변경 기본값인 1초를 사용할 경우, 연결이 너무 느리면 캐싱의 장점을 잃을 수 있다는 점을 고려해야 합니다.

반환 값:
성공하면 TRUE, 실패하면 FALSE.
예:

코드는 다음과 같습니다.



$memcache_obj = memcache_connect('memcache_host', 11211)
$memcache = new Memcache; 호스트' , 11 211) ;

?>



memcache::debug



코드는 다음과 같습니다.
bool memcache_debug ( bool $on_off )



설명:
php가 컴파일될 때 -enable-debug 옵션이 사용되는 경우 디버깅 기능을 제어합니다. 그렇지 않으면 이 기능은 아무런 효과가 없습니다.
매개변수:
$on_off: true는 디버깅을 켜는 것을 의미하고, false는 디버깅을 끄는 것을 의미합니다.
반환 값:
php가 컴파일할 때 -enable-debug 옵션을 사용하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

Memcache::decrement 사용량

코드는 다음과 같습니다:
int Memcache::decrement ( string $key [, int $value ] )



설명:
Memcache::decremen 메소드는 저장된 키의 값을 감소시키는 것입니다. 빼기 작업, 사용법은 Memcache::increment와 유사합니다.
memcache_decrement() 함수를 사용할 수도 있습니다.
매개변수:
Key: 줄이려는 키의 이름
값: 줄이려는 값.

반환값:
성공하면 축소된 값을 반환하고, 실패하면 false를 반환합니다.
예:

코드는 다음과 같습니다:

$memcache = new Memcache;
$memcache->connect('localhost', 11211); 'test_item' , 8);
$memcache->increment('test_item', 4);
echo $memcache->decrement('test_item', 7)
// 5 표시
?>


이 예제는 Memcache::increment 함수까지 함께 보여줍니다.


Memcache::delete 사용법

코드는 다음과 같습니다.
bool Memcache::delete ( string $key [, int $timeout ] )


지침:
키 값을 삭제하려면 다음과 같이 하세요. $timeout 매개변수가 설정되면 저장된 값은 설정된 초 후에 만료됩니다. memcache_delete() 함수를 사용할 수도 있습니다.

반환 값:
성공하면 TRUE를 반환하고, 실패하면 FALSE를 반환합니다.

예:

코드는 다음과 같습니다.

$memcache_obj = memcache_connect('memcache_host', 11211);

memcache_delete($memcache_obj, 'key_to_delete ', 10); memcache_obj = 새로운 Memcache;
$memcache_obj->connect('memcache_host', 11211);
$memcache_obj->delete('key_to_delete', 10);




Mem 캐시::플러시



코드는 다음과 같습니다.
bool Memcache::flush (void)

설명:
캐시된 데이터를 모두 지웁니다. Memcache::flush는 실제로 리소스를 해제하지 않고 모든 캐시를 만료된 것으로 표시하므로 새 캐시가 점유된 메모리 공간을 차지할 수 있습니다. 동일한 함수는 memcache_flush()입니다.

반환 값:
성공하면 TRUE를 반환하고, 실패하면 FALSE를 반환합니다.

예:



코드는 다음과 같습니다.


$memcache_obj = memcache_connect('memcache_host', 11211);
memcache_flush($memcache_obj);

$memcache_obj = 새로운 Memcache ;
$ memcache_obj->connect('memcache_host', 11211);

$memcache_obj->flush();

?>




Memcache::get



코드는 다음과 같습니다 다음 :

string Memcache::get ( string $key [, int &$flags ] )

array Memcache::get ( array $keys [, array &$flags ] )


설명: 다음의 함수
메서드는 키 값을 얻는 것입니다. 키 값은 배열일 수 있으며 결과에는 키-값 쌍이 포함됩니다.

매개변수:
$key는 키 값 또는 키의 배열 값입니다.
$flags 이 매개변수가 존재하는 경우 $flags는 이 매개변수에 기록된 값과 관련됩니다. 이러한 $flags는 Memcache::set() 함수의 $flags와 유사합니다.

반환값:
성공하면 키에 해당하는 값을 반환하고, 실패하면 false를 반환합니다.
예:



코드는 다음과 같습니다.


$memcache_obj = memcache_connect( 'memcache_host', 11211);
$var = memcache_get($memcache_obj, 'some_key');

$memcache_obj = new Memcache;
$memcache_obj->connect('memcache_host', 11211); ache_obj ->get('some_key');

$memcache_obj = memcache_connect('memcache_host', 11211);
$var = memcache_get($memcache_obj, Array('some_key', 'another_key'))

$memcache_obj = 새로운 Memcache;
$memcache_obj->connect('memcache_host', 11211);
$var = $memcache_obj->get(Array('some_key', 'second_key'))

?>




Memcache:: getExtendedStats



코드는 다음과 같습니다.array Memcache::getExtendedStats ([ string $type [, int $slabid [, int $limit ]]] )



설명:
프로세스 풀에 있는 모든 프로세스의 실행 중인 시스템 통계를 가져옵니다. 동일한 함수는 memcache_get_extended_stats() 입니다.

매개변수:
$type은 요청된 반환 유형을 나타냅니다: 재설정, malloc, 지도, 캐시 덤프, slabs, 항목, 크기
$slabid는 첫 번째 매개 변수가 "cachedump"로 설정된 경우 사용됩니다.
$limit의 첫 번째 매개변수가 "cachedump"로 설정된 경우 사용됩니다.
반환값:
성공하면 통계가 반환됩니다.

예:

코드는 다음과 같습니다.

$memcache_obj = new Memcache_obj; ->addServer('memcache_host' , 11211);
$memcache_obj->addServer('failed_host', 11211);

$stats = $memcache_obj->getExtendedStats(); memory
$statsslab = $memcache_obj- >getExtendedStats(slabs);

?>



Memcache::getServerStatus


코드는 다음과 같습니다.

int Memcache ::getServerStatus(문자열 $host [, int $port ] )

설명:
서버를 실행하기 위한 매개변수를 가져옵니다. 서버의 온라인 또는 오프라인 상태를 반환합니다. 동일한 함수는 memcache_get_server_status() 입니다.

매개변수:
$host: 청취 연결의 ​​호스트
$port 청취 연결의 ​​호스트 포트, 기본값은 11211

반환 값:
서버 상태를 성공적으로 반환합니다. 서버가 시작되지 않았습니다. 0을 반환하고 다른 숫자는 서버가 시작되었음을 나타냅니다.

예:

코드는 다음과 같습니다.

$memcache = new Memcache;
$memcache->addServer('memcache_host', 11211)
echo $memcache->getServerStatus( 'memcache_host', 11211);

$memcache = memcache_connect('memcache_host', 11211);
echo memcache_get_server_status($memcache, 'memcache_host', 11211);


Memcache::getStats



코드는 다음과 같습니다. array Memcache::getStats ([ string $type [, int $slabid [, int $limit ]]] )

설명:
서버의 일부 운영 통계를 반환합니다. . 동일한 함수는 memcache_get_stats()입니다.
매개변수:

$type은 요청된 반환 유형을 나타냅니다. Reset, malloc, map, cashdump, slabs, items, size
$slabid는 첫 번째 매개변수가 "cachedump"로 설정된 경우에 사용됩니다.
$limit의 첫 번째 매개변수가 "cachedump"로 설정된 경우 사용됩니다.


Memcache::getVersion




코드는 다음과 같습니다. string Memcache::getVersion (void)

설명:
실행 중인 Memcache의 버전 정보를 반환합니다. 동일한 함수 memcache_get_version()
반환값:

서버의 버전 정보를 성공적으로 반환하고, 실패하면 false를 반환합니다.

예:

코드는 다음과 같습니다.


$memcache = new Memcache;

$memcache->connect('memcache_host', 11211)

echo $memcache->getVersion( );
$memcache = memcache_connect('memcache_host', 11211);
echo memcache_get_version($memcache);
?>





Memcache::증분
코드는 다음과 같습니다.


int Memcache::increment ( string $key [, int $value ] )


저장된 키에 값을 추가하세요
사용 참조 Memcache::decrement

Memcache::pconnect




코드는 다음과 같습니다. 다음과 같습니다:

bool Memcache::pconnect ( string $host [, int $port [, int $timeout ]] )

지침:
Memcache 영구 연결 개체 만들기

사용법은 Memcache::connect( ), 약간의 차이점이 있습니다. Memcache::pconnect는 지속적인 연결을 설정하는 것입니다. 이 연결은 스크립트가 실행되거나 Memcache::close() 함수가 실행된 후에도 닫히지 않습니다. 이와 동일한 기능은 memcache_pconnect()입니다.
매개변수:
$host: memcached가 수신 대기 중인 링크의 호스트를 가리킵니다. 이 매개변수는 또 다른 특수 연결 방법 unix:///path/to/memcached.sock을 갖습니다. 즉, unix 도메인 이름 소켓을 사용합니다. 이 경우 포트는 0으로 설정되어야 합니다.
$port: memcached가 수신 대기 중인 링크의 포트를 가리킵니다. 0으로 설정해야 합니다.

$timeout: 데몬에 연결하는 데 사용되는 시간입니다. 기본값인 1초를 변경할 경우 연결이 너무 느리면 장점을 잃을 수 있다는 점을 고려해야 합니다. 캐싱.

반환 값:
성공하면 TRUE, 실패하면 FALSE를 반환합니다.

코드는 다음과 같습니다.



$memcache_obj = memcache_pconnect('memcache_host', 11211);

$memcache_obj = 새로운 Memcache
$memcache_obj->pconnect('memcache_host', 11211);

?>



Memcache::replace

코드는 다음과 같습니다.
bool Memcache::replace ( string $key , mix $var [, int $flag [, int $expire ]] )



지침:
기존 키를 덮어씁니다. 동일한 함수는 memcache_replace() 입니다.

매개변수:
$key: 저장할 키 값입니다.
$var: 저장된 값, 문자 유형 및 정수 유형은 원래 값으로 저장되며, 다른 유형은 자동으로 직렬화되어 나중에 저장됩니다.
$flag: 저장된 값을 압축하기 위해 MEMCACHE_COMPRESSED를 사용할지 여부. true는 압축을 의미하고 false는 압축하지 않음을 의미합니다.
$expire: 저장된 값의 만료 시간입니다. 0이면 만료되지 않는다는 뜻입니다. 지금부터 시간을 나타내기 위해 유닉스 타임스탬프나 설명을 사용할 수 있지만, 초를 사용하여 나타내야 합니다. 2592000초(30일을 의미)를 초과할 수 없습니다.

반환 값:
성공하면 TRUE, 실패하면 FALSE. $key 값이 이미 존재하는 경우 FALSE가 반환됩니다.

코드는 다음과 같습니다.


$memcache_obj = memcache_connect('memcache_host', 11211);
memcache_replace($memcache_obj, "test_key", "some 변수", false, 30) ;
$ memcache_obj->replace("test_key", "some 변수", false, 30)

?>




Memcache::set

코드는 다음과 같습니다.
bool Memcache::set ( string $key , Mixed $var [, int $flag [, int $expire ]] )


Description:
값을 추가하고 이미 존재하는 경우 덮어씁니다. 동일한 함수는 memcache_set() 입니다.

매개변수:
$key: 저장할 키 값입니다.
$var: 저장된 값, 문자 유형 및 정수 유형은 원래 값으로 저장되며, 다른 유형은 자동으로 직렬화되어 나중에 저장됩니다.
$flag: 저장된 값을 압축하기 위해 MEMCACHE_COMPRESSED를 사용할지 여부. true는 압축을 의미하고 false는 압축하지 않음을 의미합니다.
$expire: 저장된 값의 만료 시간입니다. 0이면 만료되지 않는다는 의미입니다. 지금부터의 시간을 유닉스 타임스탬프나 설명을 사용하여 표현할 수 있지만 초를 사용하여 표현해야 합니다. 2592000초(30일을 의미)를 초과할 수 없습니다.

반환 값:
성공하면 TRUE, 실패하면 FALSE.

예:


코드는 다음과 같습니다.
$memcache_obj = new Memcache;
$memcache_obj->connect('memcache_host', 11211);
$memcache_obj->set('var_ 키', '정말 큰 변수', memcache_compressed, 50); ::setCom pressThreshold ( int $ Threshold [, float $min_savings ] )

설명:
특정 크기보다 큰 데이터를 압축합니다. 동일한 함수는 memcache_set_compress_threshold()입니다.
매개변수: setCompressThreshold 메소드에는 두 개의 매개변수가 있습니다. 첫 번째 매개변수는 데이터 크기 처리의 임계점을 나타내고 두 번째 매개변수는 압축 비율을 나타내며 기본값은 0.2입니다.

반환 값:

성공하면 TRUE, 실패하면 FALSE.
예:
코드는 다음과 같습니다.




$memcache_obj = new Memcache;
$memcache_obj->addServer('memcache_host', 11211); gt;setCom pressThreshold (20000, 0.2 );

$memcache_obj = memcache_connect('memcache_host', 11211);
memcache_set_compress_threshold($memcache_obj, 20000, 0.2);

?>
Memcache::setServer Params

코드는 다음과 같습니다.

bool Memcache::setServerParams ( string $host [, int $port [, int $timeout [, int$retry_interval [, bool $status [, callback $failure_callback ]]]]] )



설명:
실행 중 서버 매개변수를 수정할 때. 동일한 함수는 memcache_set_server_params()입니다.

매개변수:
$host 서버 주소
$port 서버 포트

$timeout 연결 기간
$retry_interval 연결 재시도 간격, 기본값은 15, -1로 설정하면 재시도 없음
$status 제어 서버 온라인 상태
$failure_callback 허용 오류 메시지를 처리하도록 콜백 함수를 설정합니다.
반환 값:
성공하면 TRUE, 실패하면 FALSE.

예:
코드는 다음과 같습니다.


function _callback_memcache_failure($host, $port) {
print "memcache '$host:$port' failed";
}

$memcache = new Memcache

//오프라인에 하나 추가; mode Server
$memcache->addServer('memcache_host', 11211, false, 1, 1, -1, false)

// 서버를 온라인으로 설정
$memcache->setServerParams('memcache_host', 11211, 1, 15, true, '_callback_memcache_failure');

$memcache_obj = memcache_connect('memcache_host', 11211);
memcache_set_server_params($memcache_obj, 'memcache_host', 11211, 1, 15, true, '_callback _memcache_failure')

?>



6. 종합적인 사용 예시

코드는 다음과 같습니다:

//Connect
$mem = new Memcache;
$mem->connect(" db.nowamagic.net", 12000);
//데이터 저장
$mem->set('key1', '첫 번째 값입니다', 0, 60);
$val = $mem->get( 'key1') ;
echo "key1 값 가져오기: " . $val ."
"
//데이터 바꾸기
$mem->replace('key1', '값 바꾸기', 0, 60) ;
$val = $mem->get('key1');
echo "key1 값 가져오기: " . $val . "
"
//배열 저장 arr = array(' aaa', 'bbb', 'ccc', 'ddd')
$mem->set('key2', $arr, 0, 60)
$val2 = $mem-> get('key2' );
echo "key2 값 가져오기: ";
print_r($val2)
echo "
"
//데이터 삭제
$mem->delete('key1' );
$val = $mem->get('key1');
echo "키1 값 가져오기: " ."
"
$mem-> ;flush();
$val2 = $mem->get('key2');
echo "key2 값 가져오기: ";
print_r($val2);
echo "
" /Close the Connection
$ mem->close();
?>


정상이라면 브라우저는 다음을 출력합니다:


코드는 다음과 같습니다:

Get key1 값: 이것이 첫 번째 값입니다
키1 값 가져오기: 대체 값입니다.
키2 값 가져오기: 배열( [0] => aaa [1] => bbb [2] => ccc [3] => ddd )
키1 값 가져오기:
key2 값 가져오기:


7. 예제 프로그램 코드 분석

Memcache 개체 초기화: $mem = new Memcache
Memcache 서버에 연결합니다. 두 번째 매개변수는 Memcache의 공개 포트입니다: $mem->connect("192.168.0.200", 12000)
첫 번째 매개변수는 Memcache 서버의 키입니다. 데이터를 찾는 데 사용되는 두 번째 매개변수는 데이터의 키입니다. 첫 번째 매개변수는 저장해야 하는 데이터 내용입니다. 여기서는 문자열이고, 세 번째 매개변수는 표시이며 일반적으로 0 또는 MEMCACHE_COMPRESSED 네 번째 매개변수는 데이터의 유효 기간으로, 이 시간 내에 데이터가 유효함을 의미합니다. 예, 이 시간이 지나면 Memcache 서버에서 데이터를 삭제합니다. 단위는 초입니다. 0으로 설정하면 영원히 유효합니다. 여기서는 1분의 유효 시간을 설정합니다. $mem->set ('key1', '이것은 첫 번째 값입니다', 0, 60); 여기에는 데이터를 가져오는 데 필요한 매개변수가 하나만 있습니다. 다음은 이전 단계에서 설정한 key1입니다. 이제 데이터 다음에 이 출력을 가져옵니다.



코드는 다음과 같습니다.

$val = $mem->get('key1′);

echo "Get key1 value: " . $val;
이제 대체 메소드를 사용하십시오. 위의 key1 값을 대체하려면 대체 매개변수를 사용하십시오. 메소드는 set과 동일하지만 첫 번째 매개변수 key1은 데이터 내용을 대체하는 키여야 합니다. 최종 출력은 다음과 같습니다.

코드는 다음과 같습니다.


$mem-> ;replace('key1', ' 이는 값 바꾸기', 0, 60);

$val = $mem->get('key1');
echo "Get key1 value: " . $val;

마찬가지로 Memcache도 배열을 저장할 수 있습니다. 다음은 Memcache에 저장된 후 검색하여 출력하는 배열입니다.

코드는 다음과 같습니다.


$arr = array('aaa', 'bbb', 'ccc' , 'ddd'); ->set('key2', $arr, 0, 60)

$val2 = $mem->get('key2')
print_r($val2);

이제 데이터를 삭제하세요. delte 인터페이스를 사용하면 매개변수가 키이며 Memcache 서버에서 키 데이터를 삭제할 수 있습니다. 최종 출력에는 결과가 없습니다.


코드는 다음과 같습니다.

$mem->delete('key1');
$val = $mem->get('key1');
echo "키1 값 가져오기: " .



마지막으로 Memcache 서버에 저장된 모든 데이터를 지우면 데이터가 사라진 것을 확인할 수 있습니다. 최종 출력 key2 데이터가 비어 있고 마지막으로 연결이 닫힙니다.

코드는 다음과 같습니다.
$mem-> 플러시();
$val2 = $mem->get('key2');
echo "키2 값 가져오기: ";
echo " >";




Memcache를 사용하는 시기와 Memcache 사용 환경
Memcache를 사용하는 웹사이트는 일반적으로 트래픽이 상대적으로 많습니다. 데이터베이스에 대한 부담을 완화하기 위해 Memcache를 캐시 영역으로 사용합니다. 정보의 일부를 프런트 엔드의 메모리에 저장하여 빠르게 액세스할 수 있습니다. 그런 다음 일반적인 초점은 데이터베이스 압력을 공유하고 배포하는 방법입니다. 결국 단일 Memcache의 메모리 용량은 제한되어 있습니다. 나는 단지 내 개인적인 의견을 제시했을 뿐이며 이를 실천하지 않았으므로 참고용으로만 사용해야 합니다.


분산 애플리케이션
Memcache는 원래 분산 애플리케이션을 지원하지만 더 나은 지원을 제공하기 위해 클라이언트가 약간 수정되었습니다. 예를 들어 사용자 기반 웹사이트의 경우 각 사용자는 사용자 ID를 가지므로 고정된 ID에 따라 추출하고 액세스할 수 있습니다. 예를 들어 1로 시작하는 사용자는 첫 번째 Memcache 서버에서는 2로 시작하는 사용자의 데이터가 두 번째 Memcache 서버에 저장되며, User ID에 따라 접속 데이터가 먼저 변환되어 접속됩니다.
그러나 이는 사용자 ID를 판단해야 한다는 단점이 있습니다. 비즈니스가 일관성이 없거나 다른 유형의 애플리케이션이 그다지 적합하지 않을 수 있는 경우 실제 비즈니스를 기반으로 고려하거나 더 적합한 방법을 생각할 수 있습니다.


데이터베이스 부담 줄이기
이것은 상대적으로 중요합니다. 모든 데이터는 기본적으로 데이터베이스에 매번 자주 액세스하면 데이터베이스 성능이 크게 저하되고 동시에 더 많은 사용자에게 서비스를 제공할 수 없게 됩니다. , 예를 들어 MySQL과 같이 테이블이 매우 자주 잠기는 경우 Memcache가 데이터베이스에 대한 압력을 공유하도록 합니다. 상대적으로 규모가 작고 프런트엔드에 대한 대규모 변경이 필요하지 않은 방식으로 현재 아키텍처를 변경할 수 있는 방법이 필요합니다.
제가 고려하고 있는 간단한 방법은
백엔드 데이터베이스 연산 모듈이 모든 Select 연산(업데이트/삭제/삽입 여부와 상관없이)을 추출한 후, 해당 SQL에 대해 해당 해시 알고리즘을 수행하여 해시 데이터 키(예: MD5 또는 SHA), Memcache에서 이 키에 대한 데이터를 검색합니다. 데이터가 존재하지 않으면 캐시에 기록되지 않았음을 의미합니다. 그런 다음 데이터베이스에서 데이터를 추출합니다. 하나는 배열 클래스 형식입니다. 그런 다음 데이터를 세트에 넣습니다. Memcache에서 키는 SQL의 해시 값이며 이에 따라 만료 시간이 1시간과 같이 설정됩니다. 그러면 1시간의 데이터가 캐시에서 추출되어 압력이 효과적으로 줄어듭니다. 데이터베이스에. 단점은 데이터가 실시간으로 수정되지 않아 프런트엔드에 실시간으로 표시할 수 없고, 결국 각각 선택되는 데이터의 양이 많아진다는 점이다. 시간이 엄청날 수 있습니다. 이는 고려해야 할 요소입니다.


Memcache의 보안
저희 Memcache 서버는 별도의 검증과정 없이 클라이언트에 접속 후 바로 운영되기 때문에 서버가 인터넷에 직접 노출되면 더욱 위험하고 최소한의 데이터 유출도 가능합니다. 관련이 없는 다른 사람이 보거나 더 나쁘게는 Mecache가 루트 권한으로 실행되기 때문에 서버가 침입되고 그 안에 알려지지 않은 버그나 버퍼 오버플로가 있을 수 있으므로 위험은 예상됩니다. 보안을 위해 해커의 침입이나 데이터 유출을 방지하기 위한 두 가지 제안을 드리고자 합니다.


인트라넷 액세스
인트라넷 형태로 두 서버 간, 일반적으로 웹 서버와 Memcache 서버 간에 액세스하는 것이 가장 좋습니다. 일반 서버에는 두 개의 네트워크 카드가 있는데, 하나는 인터넷을 가리키고 다른 하나는 인트라넷 네트워크 카드를 통해 웹 서버가 Memcache 서버에 액세스하도록 합니다. 인트라넷 포트 및 인트라넷 액세스는 기타 불법 액세스를 효과적으로 방지할 수 있습니다.

코드는 다음과 같습니다.
# memcached -d -m 1024 -u root -l 192.168.0.200 -p 11211 -c 1024 -P /tmp/memcached.pid


Memcache 서버는 인트라넷을 통해 IP 192.168.0.200의 11211 포트를 수신하도록 설정되어 있으며, 1024MB의 메모리를 차지하고 최대 1024개의 동시 연결을 허용합니다.

방화벽 설정
방화벽은 간단하고 효과적인 방법입니다. 두 서버가 모두 인터넷에 연결되어 있고 외부 IP를 통해 Memcache에 액세스해야 하는 경우 불법 액세스를 필터링하기 위해 방화벽이나 에이전트를 사용하는 것을 고려할 수 있습니다. . 일반적으로 Linux에서는 FreeBSD에서 iptables 또는 ipfw를 사용하여 일부 불법 액세스를 방지하기 위한 몇 가지 규칙을 지정할 수 있습니다. 예를 들어 웹 서버가 Memcache 서버에 액세스하는 것만 허용하고 다른 액세스는 차단하도록 설정할 수 있습니다.

코드는 다음과 같습니다.
# iptables -F
# iptables -P INPUT DROP
# iptables -A INPUT -p tcp -s 192.168.0.2 –dport 11211 -j ACCEPT
# iptables -A INPUT -p udp -s 192.16 8 .0.2 –dport 11211 -j ACCEPT


위의 iptables 규칙은 192.168.0.2 웹 서버가 Memcache 서버에 액세스하도록 허용하므로 일부 불법 액세스를 효과적으로 방지할 수 있습니다. 보안을 강화하세요. 이는 귀하의 필요에 따라 수행될 수 있습니다.

실제 전투

//memcached 구성
/********************************************/
$mem_ip='127.0.0.1';
$mem_port=11211;
$mem_prefix='';
/********************************************/

/********************************************/
//session memcached 구성, 독립적인 memcache 서비스(다른 IP 또는 다른 포트 번호)로 구성하세요.
//여러 미러 스테이션 설정이 동일해야 합니다. 그렇지 않으면 세션이 손실됩니다
//충돌을 피하기 위해 다른 프로그램에서는 이 서비스를 사용할 수 없습니다.
/********************************************/
$session_mem_ip='127.0.0.1';
$session_mem_port=11212;

function Instance_Memcached()
{
static $mem=false;
if($mem==false && isset($GLOBALS['mem_ip']) && isset($GLOBALS['mem_port']) && Extension_loaded('memcache'))
{
$mem=new Memcache;
$mem->pconnect($GLOBALS[ 'mem_ip'],$GLOBALS['mem_port']) 또는 die('Memcache 서버에 연결할 수 없습니다!');
}
return $mem;
}

위 내용은 멤캐시 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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