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 사용법
참고:
$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 사용법
지침:
사용 가능한 서버 주소가 연결 풀에 추가되고 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->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::connect 사용법
코드는 다음과 같습니다. ::connect ( string $host [, int $port [, int $timeout ]] )
지침: memcached 서버 연결을 열고 Memcache::connect로 열린 연결을 설정합니다. 스크립트가 실행된 후 자동으로 닫힙니다. Memcache::close()를 사용하여 연결을 닫을 수도 있습니다. 동일한 함수가 memcache_connect()입니다.
반환 값:
성공하면 TRUE, 실패하면 FALSE.
예:
코드는 다음과 같습니다.
$memcache_obj = memcache_connect('memcache_host', 11211)
$memcache = new Memcache; 호스트' , 11 211) ;
memcache::debug
코드는 다음과 같습니다.
설명:
php가 컴파일될 때 -enable-debug 옵션이 사용되는 경우 디버깅 기능을 제어합니다. 그렇지 않으면 이 기능은 아무런 효과가 없습니다.
매개변수:
$on_off: true는 디버깅을 켜는 것을 의미하고, false는 디버깅을 끄는 것을 의미합니다.
반환 값:
php가 컴파일할 때 -enable-debug 옵션을 사용하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
Memcache::decrement 사용량
설명:
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 사용법
지침:
키 값을 삭제하려면 다음과 같이 하세요. $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)
반환 값:
성공하면 TRUE를 반환하고, 실패하면 FALSE를 반환합니다.
예:
코드는 다음과 같습니다.
$memcache_obj = 새로운 Memcache ;
$ memcache_obj->connect('memcache_host', 11211);
$memcache_obj->flush();
?>
Memcache::get
코드는 다음과 같습니다 다음 :
string Memcache::get ( string $key [, int &$flags ] )
설명: 다음의 함수
메서드는 키 값을 얻는 것입니다. 키 값은 배열일 수 있으며 결과에는 키-값 쌍이 포함됩니다.
매개변수:
$key는 키 값 또는 키의 배열 값입니다.
$flags 이 매개변수가 존재하는 경우 $flags는 이 매개변수에 기록된 값과 관련됩니다. 이러한 $flags는 Memcache::set() 함수의 $flags와 유사합니다.
반환값:
성공하면 키에 해당하는 값을 반환하고, 실패하면 false를 반환합니다.
예:
코드는 다음과 같습니다.
$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
코드는 다음과 같습니다.
설명:
서버를 실행하기 위한 매개변수를 가져옵니다. 서버의 온라인 또는 오프라인 상태를 반환합니다. 동일한 함수는 memcache_get_server_status() 입니다.
매개변수:
$host: 청취 연결의 호스트
$port 청취 연결의 호스트 포트, 기본값은 11211
반환 값:
서버 상태를 성공적으로 반환합니다. 서버가 시작되지 않았습니다. 0을 반환하고 다른 숫자는 서버가 시작되었음을 나타냅니다.
예:
코드는 다음과 같습니다.
$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 ]]] )
$type은 요청된 반환 유형을 나타냅니다. Reset, malloc, map, cashdump, slabs, items, size
$slabid는 첫 번째 매개변수가 "cachedump"로 설정된 경우에 사용됩니다.
$limit의 첫 번째 매개변수가 "cachedump"로 설정된 경우 사용됩니다.
Memcache::getVersion
코드는 다음과 같습니다. string Memcache::getVersion (void)
서버의 버전 정보를 성공적으로 반환하고, 실패하면 false를 반환합니다.
예:
코드는 다음과 같습니다.
$memcache = new Memcache;
echo memcache_get_version($memcache);
?>
Memcache::증분
int Memcache::increment ( string $key [, int $value ] )
저장된 키에 값을 추가하세요사용 참조 Memcache::decrement
코드는 다음과 같습니다. 다음과 같습니다:
bool Memcache::pconnect ( string $host [, int $port [, int $timeout ]] )
지침:
Memcache 영구 연결 개체 만들기
$timeout: 데몬에 연결하는 데 사용되는 시간입니다. 기본값인 1초를 변경할 경우 연결이 너무 느리면 장점을 잃을 수 있다는 점을 고려해야 합니다. 캐싱.
반환 값:
성공하면 TRUE, 실패하면 FALSE를 반환합니다.
코드는 다음과 같습니다.
$memcache_obj = memcache_pconnect('memcache_host', 11211);
$memcache_obj = 새로운 Memcache
$memcache_obj->pconnect('memcache_host', 11211);
?>
Memcache::replace
지침:
기존 키를 덮어씁니다. 동일한 함수는 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
Description:
값을 추가하고 이미 존재하는 경우 덮어씁니다. 동일한 함수는 memcache_set() 입니다.
매개변수:
$key: 저장할 키 값입니다.
$var: 저장된 값, 문자 유형 및 정수 유형은 원래 값으로 저장되며, 다른 유형은 자동으로 직렬화되어 나중에 저장됩니다.
$flag: 저장된 값을 압축하기 위해 MEMCACHE_COMPRESSED를 사용할지 여부. true는 압축을 의미하고 false는 압축하지 않음을 의미합니다.
$expire: 저장된 값의 만료 시간입니다. 0이면 만료되지 않는다는 의미입니다. 지금부터의 시간을 유닉스 타임스탬프나 설명을 사용하여 표현할 수 있지만 초를 사용하여 표현해야 합니다. 2592000초(30일을 의미)를 초과할 수 없습니다.
반환 값:
성공하면 TRUE, 실패하면 FALSE.
예:
$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입니다.
반환 값:
$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 서버 주소
$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();
?>
코드는 다음과 같습니다:
키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′);
코드는 다음과 같습니다.
$mem-> ;replace('key1', ' 이는 값 바꾸기', 0, 60);
마찬가지로 Memcache도 배열을 저장할 수 있습니다. 다음은 Memcache에 저장된 후 검색하여 출력하는 배열입니다.
코드는 다음과 같습니다.
$arr = array('aaa', 'bbb', 'ccc' , 'ddd'); ->set('key2', $arr, 0, 60)
이제 데이터를 삭제하세요. delte 인터페이스를 사용하면 매개변수가 키이며 Memcache 서버에서 키 데이터를 삭제할 수 있습니다. 최종 출력에는 결과가 없습니다.
$val = $mem->get('key1');
echo "키1 값 가져오기: " .
마지막으로 Memcache 서버에 저장된 모든 데이터를 지우면 데이터가 사라진 것을 확인할 수 있습니다. 최종 출력 key2 데이터가 비어 있고 마지막으로 연결이 닫힙니다.
$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 서버에 액세스하도록 합니다. 인트라넷 포트 및 인트라넷 액세스는 기타 불법 액세스를 효과적으로 방지할 수 있습니다.
Memcache 서버는 인트라넷을 통해 IP 192.168.0.200의 11211 포트를 수신하도록 설정되어 있으며, 1024MB의 메모리를 차지하고 최대 1024개의 동시 연결을 허용합니다.
방화벽 설정
방화벽은 간단하고 효과적인 방법입니다. 두 서버가 모두 인터넷에 연결되어 있고 외부 IP를 통해 Memcache에 액세스해야 하는 경우 불법 액세스를 필터링하기 위해 방화벽이나 에이전트를 사용하는 것을 고려할 수 있습니다. . 일반적으로 Linux에서는 FreeBSD에서 iptables 또는 ipfw를 사용하여 일부 불법 액세스를 방지하기 위한 몇 가지 규칙을 지정할 수 있습니다. 예를 들어 웹 서버가 Memcache 서버에 액세스하는 것만 허용하고 다른 액세스는 차단하도록 설정할 수 있습니다.
# 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

데이터베이스 스토리지 세션 사용의 주요 장점에는 지속성, 확장 성 및 보안이 포함됩니다. 1. 지속성 : 서버가 다시 시작 되더라도 세션 데이터는 변경되지 않아도됩니다. 2. 확장 성 : 분산 시스템에 적용하여 세션 데이터가 여러 서버간에 동기화되도록합니다. 3. 보안 : 데이터베이스는 민감한 정보를 보호하기 위해 암호화 된 스토리지를 제공합니다.

SessionHandlerInterface 인터페이스를 구현하여 PHP에서 사용자 정의 세션 처리 구현을 수행 할 수 있습니다. 특정 단계에는 다음이 포함됩니다. 1) CustomsessionHandler와 같은 SessionHandlerInterface를 구현하는 클래스 만들기; 2) 인터페이스의 방법 (예 : Open, Close, Read, Write, Despare, GC)의 수명주기 및 세션 데이터의 저장 방법을 정의하기 위해 방법을 다시 작성합니다. 3) PHP 스크립트에 사용자 정의 세션 프로세서를 등록하고 세션을 시작하십시오. 이를 통해 MySQL 및 Redis와 같은 미디어에 데이터를 저장하여 성능, 보안 및 확장 성을 향상시킬 수 있습니다.

SessionId는 웹 애플리케이션에 사용되는 메커니즘으로 사용자 세션 상태를 추적합니다. 1. 사용자와 서버 간의 여러 상호 작용 중에 사용자의 신원 정보를 유지하는 데 사용되는 무작위로 생성 된 문자열입니다. 2. 서버는 쿠키 또는 URL 매개 변수를 통해 클라이언트로 생성하여 보낸다. 3. 생성은 일반적으로 임의의 알고리즘을 사용하여 독창성과 예측 불가능 성을 보장합니다. 4. 실제 개발에서 Redis와 같은 메모리 내 데이터베이스를 사용하여 세션 데이터를 저장하여 성능 및 보안을 향상시킬 수 있습니다.

JWT 또는 쿠키를 사용하여 API와 같은 무국적 환경에서 세션을 관리 할 수 있습니다. 1. JWT는 무국적자 및 확장 성에 적합하지만 빅 데이터와 관련하여 크기가 크다. 2. 쿠키는보다 전통적이고 구현하기 쉽지만 보안을 보장하기 위해주의해서 구성해야합니다.

세션 관련 XSS 공격으로부터 응용 프로그램을 보호하려면 다음 조치가 필요합니다. 1. 세션 쿠키를 보호하기 위해 Httponly 및 Secure 플래그를 설정하십시오. 2. 모든 사용자 입력에 대한 내보내기 코드. 3. 스크립트 소스를 제한하기 위해 컨텐츠 보안 정책 (CSP)을 구현하십시오. 이러한 정책을 통해 세션 관련 XSS 공격을 효과적으로 보호 할 수 있으며 사용자 데이터가 보장 될 수 있습니다.

PHP 세션 성능을 최적화하는 방법 : 1. 지연 세션 시작, 2. 데이터베이스를 사용하여 세션을 저장, 3. 세션 데이터 압축, 4. 세션 수명주기 관리 및 5. 세션 공유 구현. 이러한 전략은 높은 동시성 환경에서 응용의 효율성을 크게 향상시킬 수 있습니다.

THESESSION.GC_MAXLIFETIMESETTINGINSTTINGTINGSTINGTERMINESTERMINESTERSTINGSESSIONDATA, SETINSECONDS.1) IT'SCONFIGUDEDINPHP.INIORVIAINI_SET ()

PHP에서는 Session_Name () 함수를 사용하여 세션 이름을 구성 할 수 있습니다. 특정 단계는 다음과 같습니다. 1. Session_Name () 함수를 사용하여 Session_Name ( "my_session")과 같은 세션 이름을 설정하십시오. 2. 세션 이름을 설정 한 후 세션을 시작하여 세션을 시작하십시오. 세션 이름을 구성하면 여러 응용 프로그램 간의 세션 데이터 충돌을 피하고 보안을 향상시킬 수 있지만 세션 이름의 독창성, 보안, 길이 및 설정 타이밍에주의를 기울일 수 있습니다.


핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

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

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

WebStorm Mac 버전
유용한 JavaScript 개발 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.
