2009-12-14 6 views
2

현재 AbleDating 시스템으로 php/mysql 프로젝트를 작성 중입니다. 고객이 서버로드에 대해 걱정하고 있으므로 "캐싱"을 최대한 많이 사용하도록 요청했으며, mysql을 캐시하도록 요청했습니다. 쿼리 및 일부 html 영역 ...PHP와 MySQL 캐싱

PHP로 일부 html 영역 만 캐시 할 수 있습니까? 그렇다면 어떻게해야합니까?

mysql 캐싱은 확인하기위한 옵션 일 뿐이며 코딩에서 변경해야합니까?

감사합니다.

답변

1

MySql 캐싱은 기본적으로 데이터베이스에 발행 된 SQL에 대해 결과 집합을 캐시합니다. SQL 문/쿼리가 캐시에 있으면 데이터베이스 엔진에서 작업을 수행하지 않고 결과 집합이 반환됩니다. 따라서 정확도를 유지하는데 일정량의 오버 헤드가있다 (즉, DB는 변경 사항을 추적하고 이에 따라 캐시 엔트리를 플러시해야 함).

캐싱 메커니즘이 플레이스 홀더 (바운드 변수)를 고려하고 SQL 계획이 발견되면 "하드"구문 분석 (예 : SQL이 유효한지 확인)을 생략하는 Oracle과 같은 다른 데이터베이스와 비교하십시오. SQL 공통 캐시에 저장하십시오.

동일한 SQL을 데이터베이스에 반복적으로 제출하면 캐싱이 상당한 차이를 만들 수 있습니다. 그렇지 않은 경우 추가 오버 헤드로 인해 이익이 상실 될 수도 있습니다. 그러나 시스템의 일부 통계 (예 : SQL 프로파일 링, 쿼리 로그 분석 등)가 있어야 알 수 있습니다.

1

memcached 메모리에 아무것도 (PHP, MySQL의 결과를, 무엇이든) 캐시 할 수있는 좋은 방법입니다 minicache라고 chacher PHP는이 모습이 자기를 사용합니다. 쉽게와 커플이 Zend_Cache 같은 캐싱 라이브러리를 사용하고 그것은 식은 죽 먹기 캐싱하게 :

$frontendOptions = array(
    'lifetime' => 60, // Seconds to cache 
    'automatic_serialization' => true 
); 

$cache = Zend_Cache::factory('Core', 
          'Memcached', 
          $frontendOptions); 

if (!$my_nasty_large_result = $cache->load('my_nasty_large_result')) { 
    $nasty_big_long_query = $db->query('SELECT * FROM huge_table'); 
    $nasty_big_long_result = array(); 
    foreach ($nasty_big_long_result as $result) 
     $nasty_big_long_result[] = $result; 

    $cache->save($nasty_big_long_result, 'my_nasty_large_resultt'); 
} 
+0

Zend_Cache는 캐싱을 위해 중대하다 - 나는 파일 기반 캐싱을 위해 그것을도 사용하고 엄청난 성능 향상입니다. – jeffff