북경대학교 파랑새 디자인 교육: PHP 어플리케이션에서 일반적으로 사용되는 9 가지 캐싱 기술? 1. 전체 페이지 정적 캐싱이란 모든 페이지를 html 정적 페이지로 생성하는 것으로, PHP 서버 구문 분석 없이 사용자가 액세스할 때 직접 액세스할 수 있습니다. 이 방법은 dedecms; 와 같은 CMS 시스템에서 흔히 볼 수 있습니다. 일반적인 구현은 캐시 출력입니다. ob_start()***** 실행할 코드 * * * * * $ content = ob _ get _ contents (); * * * * 캐시된 내용을 html 파일에 씁니다. * * * * ob _ end _ clean (); 둘째, 이름에서 알 수 있듯이 데이터 캐싱은 데이터를 캐시하는 방법입니다. 예를 들어 쇼핑몰의 어떤 상품 정보는 상품 id 가 요청될 때 점포 정보, 상품 정보 등을 포함한 데이터를 받게 된다. 이때 이 데이터를 PHP 파일에 캐시할 수 있습니다. 파일 이름에는 상품 id 가 포함되어 있어 고유한 logo 를 만들 수 있습니다. 다음에 누군가가 이 제품을 확인하려 할 때, 먼저 이 파일의 정보를 직접 조정할 수 있습니다. 데이터베이스 조회를 하지 않아도 됩니다. 캐시 파일에 캐시되는 것은 PHP 배열과 같은 것입니다. 이 방법은 Ecmall 몰 시스템에 적용됩니다. 셋째, 캐시를 질의합니다. 사실, 이것은 데이터 캐싱과 하나의 아이디어입니다. 즉, 쿼리 문에 따라 캐싱하는 것입니다. 조회된 데이터를 파일에 캐시하고, 다음에 같은 조회가 발생하면 데이터베이스를 찾는 대신 이 파일에서 직접 데이터를 조정합니다. (윌리엄 셰익스피어, 데이터베이스, 데이터베이스, 데이터베이스, 데이터베이스, 데이터베이스, 데이터베이스, 데이터베이스, 데이터베이스, 데이터베이스, 데이터베이스) 그러나 여기서 캐시 파일 이름은 쿼리 문에 따라 고유한 레이블을 설정해야 할 수 있습니다. 시간에 따라 캐시를 변경한다는 것은 캐시된 파일에 대해 유효한 시간을 설정해야 한다는 것을 의미합니다. 이 기간 동안 동일한 액세스가 먼저 캐시 파일의 내용을 가져옵니다. 그러나 설정된 캐시 시간을 초과하면 데이터베이스에서 데이터를 검색하고 최신 캐시 파일을 생성해야 합니다. 예를 들어, 우리 쇼핑몰의 홈페이지를 2 시간마다 업데이트하도록 설정했습니다. 넷. 페이지 부품 캐시. 이러한 페이지에서 자주 변경되지 않는 부분은 정적으로 캐시되고, 자주 변경되는 블록은 캐시되지 않고, 마지막으로 함께 조립되어 표시됩니다. Ob_get_contents 와 같은 방식으로 또는 ESI 와 같은 페이지 조각 캐싱 정책을 사용하여 동적 페이지의 상대적으로 정적 조각 부분을 캐시할 수 있습니다. 이 방법은 쇼핑몰의 상품 페이지와 같이 사용할 수 있습니다. 5. Opcode 캐시는 먼저 PHP 코드를 토큰으로 구문 분석 한 다음 Opcode 코드로 컴파일하고 마지막으로 Opcode 코드를 실행하여 결과를 반환합니다. 따라서 동일한 PHP 파일의 경우 첫 번째 실행 시 해당 Opcode 코드를 캐시할 수 있으며, 다음에 이 페이지를 실행할 때 캐시된 Opcode 코드를 직접 찾아 마지막 단계를 직접 수행할 수 있습니다. 중간 단계는 필요하지 않습니다. XCache, TurckMMCache, PHP 가속기 등으로 유명합니다. 여섯. 컨텐츠별 캐시 변경은 별도의 캐시 기술이 아니므로 함께 사용해야 합니다. 즉, 데이터베이스 컨텐츠가 수정되면 캐시 파일이 즉시 업데이트됩니다. 예를 들어, 교통량이 많은 쇼핑몰, 상품이 많으며, 상품 목록이 비교적 커야 하며, 이 목록의 압력도 비교적 무겁다. 우리는 제품 데모 페이지를 캐시 할 수 있습니다. 상인이 백그라운드에서 이 상품 정보를 수정할 때 저장을 클릭하면 캐시 파일도 업데이트됩니다. 그런 다음 구매자가 이러한 제품 정보를 액세스하면 실제로 데이터베이스에 액세스하는 대신 정적 페이지를 묻습니다. 제품 페이지에 캐시가 없는 경우 한 번에 한 제품씩 액세스할 때마다 데이터베이스에서 조회한다고 상상해 보십시오. 10 만 명이 온라인으로 제품을 찾아보면 서버 부담이 커질 수 있다. 7, 메모리 캐시가 이것을 언급했는데, 아마도 당신이 가장 먼저 생각한 것은 Memcached; 일 것이다. Memcached 는 고성능 분산 메모리 캐시 서버입니다. 일반적으로 데이터베이스 쿼리 결과를 캐시하여 데이터베이스 액세스 횟수를 줄여 동적 웹 응용 프로그램의 속도와 확장성을 높이는 것이 일반적인 목적입니다. 캐시할 정보를 시스템 메모리에 캐시하는 것입니다. 정보를 얻어야 할 때 메모리에서 직접 얻을 수 있습니다.
더 일반적인 방법은 key_gt; 입니다. : 값 모드; Connect($memcachehost, $memcacheport) 또는 die (연결할 수 없음); $memcache- 설정 (키 캐시 내용); $ get = $ memcache-get ($ key); //정보 얻기? Amp;; Gt8, Apache 캐시 모듈 Apache 가 설치된 후에는 캐싱이 허용되지 않습니다. 광저우 IT 교육/Apache 설치 시 mod_cache 모듈이 활성화된 경우 외부 캐시 또는 squid 서버에 웹 가속이 필요한 경우 htttpd.conf 에 설정해야 한다고 생각합니다.
Php 의 캐시 영역을 지우려면 어떻게 해야 합니까?
캐시 영역은 어떤 캐시를 의미하며, 일반적으로 논리적 캐시와 프로세스 캐시를 말합니다 (이 용어가 맞는지 모르겠지만, 어쨌든 이 의미입니다). 논리적 캐시는 파일 캐시, redis 등을 말합니다. 이 경우 해당 파일이나 redis-client 를 제거하면 됩니다. 프로세스 캐시의 경우, 일반적인 라이프 사이클은 길지 않으며, 페이지 끝은 재활용됩니다. 따라서 이것은 특별히 명확하지 않습니다. 이 지우기 방법은 서비스를 다시 시작하는 것입니다. fast-cgi 를 사용하면 php-fpm 을 다시 시작합니다. Apache 의 module 을 사용하여 로드하는 경우 Apache 를 다시 시작합니다
Phpredis 는 MySQL 캐싱을 하는데, 어떻게 비동기 REDIS 를 MySQL 데이터베이스에 동기화합니까?
이 시점에서 IT 코드 농부가 지나가고 개인적인 견해를 남겼습니다.
Redis 가 Mysql 의 데이터를 비동기적으로 동기화하려면 대부분 대기열 형식을 사용합니다. 예를 들어, PHP 는 resque 패키지를 사용하여 배포하고, 자동 대기열 형태를 구현하고, 추가 스레드 수신을 열고, 일부 작업을 대기열에 푸시한 다음 수신 후 관련 작업 (컨트롤러 및 메서드) 을 Mysql 테이블에 동기화합니다.
또는 swoole 확장을 통해 REDS 를 캡슐화하는 비동기 작업을 통해 REDS 의 비동기를 쉽게 구현한 다음 데이터를 MySQL 에 동기화할 수 있습니다.
마지막으로, 좋아하는 파트너는 나에게 찬사를 주거나 관심을 가질 수 있다.
Redis 는 데이터베이스 캐시를 어떻게 구현합니까?
대략 두 가지 조치:
첫째, 스크립트 동기화: 1, 직접 스크립트를 작성하여 데이터베이스 데이터를 redis/memcached 에 기록합니다. 2, 이는 실시간 데이터 변경 문제 (mysqlrowbinlog 의 실시간 분석), binlog 증분 가입 Alibaba 의 canal, 캐시 계층 데이터 손실/만료 후 데이터 동기화 복구 문제를 포함합니다.
둘째, 비즈니스 계층 구현: 1, 먼저 nosql 캐시 계층을 읽고, 데이터가 없으면 MySQL 계층을 읽고, nosql 에 데이터를 씁니다. 2, nosql 계층은 다중 노드 분산 (일관성 해시) 및 노드 장애 후 대체 (다중 계층 해시 인접 대체 노드 찾기) 및 데이터 진동 복구를 수행합니다.
Redis 데이터베이스 캐시 분석 구현:
매우 빠르게 변화하는 데이터의 경우 기존의 정적 캐시 방식 (Memocached, FileSystem 등) 을 선택하여 데이터를 표시하는 경우 캐시 액세스에 많은 오버헤드가 있을 수 있으며 요구 사항을 제대로 충족하지 못할 수 있습니다. Redis 와 같은 메모리 기반 NoSQL 데이터베이스는 실시간 데이터의 컨테이너로 사용하기에 적합합니다.
그러나 데이터 신뢰성이 필요한 경우가 많으며, MySQL 을 데이터 저장소로 사용하면 메모리 문제로 인한 데이터 손실이 발생하지 않으며 관계형 데이터베이스의 특성을 활용하여 많은 기능을 수행할 수 있습니다. 따라서 MySQL 을 데이터 저장소 엔진으로 사용할 수 있는지, Redis 를 캐시로 사용할 수 있는지 자연스럽게 생각할 수 있습니다.
MySQL-Redis 데이터 복제 시나리오는 MySQL 또는 Redis 에 관계없이 자체 데이터 동기화 메커니즘을 갖추고 있으며, 일반적으로 사용되는 MySQL 의 마스터/슬레이브 모드는 Slave 측 분석 마스터의 binlog 에 의해 구현되며, 이러한 데이터 복제는 실제로 비동기 프로세스입니다. 그러면 이론적으로 MySQL 의 binlog 파일을 분석하고 Redis 에 데이터를 삽입하는 것과 같은 방식으로 사용할 수 있습니다.
따라서 개발 비용이 더 저렴한 방법을 선택하고, 이미 성숙한 MySQLUDF 를 차용하고, MySQL 데이터를 먼저 Gearman 에 배치한 다음 직접 작성한 PHPGearmanWorker 를 통해 Redis 에 동기화합니다. Binlog 를 분석하는 방식보다 많은 프로세스가 추가되었지만 구현 비용이 저렴하고 조작하기 쉽습니다.