이 글은 주로 참고할만한 가치가 있는 PHP 데이터베이스 캐싱 구현에 대한 아이디어를 소개합니다. 필요한 친구들이 참고할 수 있도록
왜 해야 할까요? 쿼리 결과를 캐시하나요? 쿼리 결과를 캐싱하면 스크립트 실행 시간과 리소스 요구 사항을 크게 개선할 수 있습니다. SQL 쿼리 결과를 캐싱하면 데이터를 사후 처리할 수도 있습니다. 파일 캐시를 사용하여 전체 스크립트의 출력(HTML 출력)을 저장하는 경우 작동하지 않을 수 있습니다. S SQL 쿼리를 실행할 때 주문 처리 과정은 다음과 같습니다. & lt;-[if! SupportLists]-& gt l & lt;-[endif]-& gt; !--[if !supportLists]-->l ; SQL 쿼리 준비 l 데이터베이스에 쿼리 보내기 l --[if !supportLists]-->l ~ ,, ; 이는 대량의 반환 데이터를 얻는 두 가지 요소와 데이터베이스 서버의 위치를 통해서만 조정될 수 있습니다. 지속적인 연결은 데이터베이스에 연결할 때 부하를 향상시킬 수 있지만, 많은 양의 데이터를 얻을 경우 전체 저장 시간이 매우 짧습니다.SQL 쿼리 만들기: SQL(Structured Query Language) 쿼리는 데이터베이스와 해당 내용을 조작하기 위한 인터페이스로 사용됩니다. SQL을 사용하여 테이블 구조를 정의 및 편집하고, 테이블에 데이터를 삽입하고, 테이블의 정보를 업데이트하거나 삭제할 수 있습니다. SQL은 데이터와 통신하는 데 사용되는 언어입니다. 대부분의 PHP 데이터베이스 확장(MySQL, ODBC, Oracle 등)에서는 SQL 쿼리를 데이터베이스에 전달하여 전체 프로세스를 관리합니다. 이 튜토리얼에서는 선택한 언어만 데이터베이스의 데이터를 얻는 데 사용됩니다. 이 데이터는 캐시되어 나중에 데이터 소스로 사용됩니다.캐시 업데이트 시기 결정: 캐싱은 프로그램의 필요에 따라 다양한 형태를 취할 수 있습니다. 가장 일반적인 3가지 방법은 다음과 같습니다. l 콘텐츠 변경 트리거 캐시(데이터 변경 사항을 발견한 후 그에 따라 캐시가 업데이트됨) l ->ll ]-& gt; l & lt;!-[endif]-& gt; 배열 직렬화 & lt;-[if! ; l & lt;-[endif]-& gt; 직렬화된 배열을 파일에 저장합니다 [php] view plaincopy "컴퓨터" ;i:2;s:25:"컴퓨터에 대한 설명";s:20:"category_description" ;s:25: "컴퓨터에 대한 설명";}} 이 출력은 해당 변수 및 유형의 내부 표현입니다. mysql_fetch_array() 함수를 사용하여 숫자 인덱스 배열과 연관 배열(데이터가 두 번 발생하는 것처럼 보이는 이유)을 반환한다고 가정합니다. 하나는 숫자 인덱스이고 다른 하나는 문자열 인덱스입니다. 캐싱 사용:캐싱을 사용하려면 unserialize() 함수를 사용하여 데이터를 원래 형식과 유형으로 복원해야 합니다. file_get_contents() 함수를 사용하여 sql_cache.txt 파일의 내용을 읽고 이를 변수에 할당할 수 있습니다. 참고: 이 기능은 PHP4.3.0 이상에서 유효합니다. 이전 버전의 PHP를 사용하는 경우 간단한 방법은 file() 함수를 사용하는 것입니다(전체 파일을 배열로 읽어 들이면 각 행이 배열이 됩니다). implode() 함수는 배열의 각 요소를 문자열로 연결한 다음 unserialize()를 사용하여 역직렬화하는 데 사용됩니다. // file_get_contents() PHP < 4.3.0 [php]view plaincopy $file = 'sql_cache.txt'; $records = unserialize(implode('',file($file))); //现在你可以通过$records数组并且取得原始查询的数据: foreach ($records as $id=>$row) { print $row['category_name']."<br>"; } 로그인 후 복사 에 적합합니다. $records는 배열(쿼리 결과를 포함하는 숫자 인덱스 열입니다. 각 행은 숫자이고 문자열 ... 정말 엉망입니다) 연속으로. 함께 배치:이 예의 시간을 기준으로 캐시할지 여부를 결정하세요. 파일 수정 타임스탬프가 현재 타임스탬프에서 만료 타임스탬프를 뺀 것보다 크면 캐시가 사용되고, 그렇지 않으면 캐시가 업데이트됩니다. <--[if !supportLists]-->l | [php] 일반 사본 보기$file = 'sql_cache.txt'; $expire = 86400; // 24 小时 (单位:秒) if (file_exists($file) && filemtime($file) > (time() - $expire)) { // 取得缓存中的记录 $records = unserialize(file_get_contents($file)); } else { // 通过 serialize() 函数创建缓存 } 로그인 후 복사 추가 다른 가능성: l -[if !supportLists]-->l > > 일치하지 않는 경우 캐시를 업데이트합니다(이 기능이 실행될 확률은 1/100으로 설정 가능). 해시 알고리즘(예: MD5())은 문자열이나 파일이 변경되었는지 확인하는 데 도움이 될 수 있습니다.l () 함수는 false를 반환합니다). unlink() 함수를 사용하여 파일을 삭제할 수 있습니다. 스크립트: [php] 일반 복사 보기$file = 'sql_cache.txt'; $expire = 86400; // 24 小时 if (file_exists($file) && filemtime($file) > (time() - $expire)) { $records = unserialize(file_get_contents($file)); } else { $link = mysql_connect('localhost','username','password') or die (mysql_error()); mysql_select_db('shop') or die (mysql_error()); /* 构造SQL查询 */ $query = "SELECT * FROM categories"; $result = mysql_query($query) or die (mysql_error()); while ($record = mysql_fetch_array($result) ) { $records[] = $record; } $OUTPUT = serialize($records); $fp = fopen($file,"w"); fputs($fp, $OUTPUT); fclose($fp); } // end else // 查询结果在数组 $records 中 foreach ($records as $id=>$row) { if ($row['category_id'] == $_REQUEST['category_id']) { // 被选择的目录显示粗体字 print '<B>'.$row['category_name'].'</B><BR>'; } else { // 其它目录显示用常规字体 print $row['category_name'].'<br>'; } } // end foreach 로그인 후 복사
|
위 내용은 PHP 데이터베이스 캐시 구현 아이디어의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!