ホームページ > バックエンド開発 > PHPチュートリアル > PHP データベース キャッシュ実装のアイデア

PHP データベース キャッシュ実装のアイデア

不言
リリース: 2023-03-28 19:08:01
オリジナル
4113 人が閲覧しました

この記事では、主に php データベース キャッシュの実装に関するアイデアを紹介します。これは、必要な友人に参考にしていただけるようになりました。

なぜそうすべきなのか。検索結果をキャッシュしますか? クエリ結果をキャッシュすると、スクリプトの実行時間とリソース要件が大幅に改善されます。

SQL クエリ結果をキャッシュすると、データの後処理も可能になります。ファイル キャッシュを使用してスクリプトの出力全体 (HTML 出力) を保存する場合、これは機能しない可能性があります。 S SQL クエリを実行すると、注文の処理プロセスは次のようになります。

& lt;-[if! SupportLists]-& gt; l & lt;-[endif]-& gt; !--[if !supportLists]-->l ; SQL クエリを準備します

l

<! - [if!supportlists] - > l - [if!supportlists] - > l ,,;これは、返される大量のデータの取得とデータベース サーバーの場所の 2 つの要素によってのみ調整できます。継続的に接続すると、データベースに接続する際の負荷が軽減されますが、大量のデータを取得すると、メモリ リソースが非常に消費され、全体の保存時間が非常に短くなります。

SQL クエリを作成する:

SQL (構造化クエリ言語) クエリは、データベースとその内容を操作するためのインターフェイスとして使用されます。 SQL を使用すると、テーブルの構造の定義と編集、テーブルへのデータの挿入、テーブル内の情報の更新または削除ができます。

SQL はデータと通信するために使用される言語です。ほとんどの PHP データベース拡張機能 (MySQL、ODBC、Oracle など) では、SQL クエリをデータベースに渡すことによってプロセス全体が管理されます。

このチュートリアルでは、データベース内のデータを取得するために選択した言語のみが使用されます。このデータはキャッシュされ、後でデータ ソースとして使用されます。

いつキャッシュを更新するかを決定します:

キャッシュは、プログラムのニーズに応じてさまざまな形式を取ることができます。最も一般的な 3 つの方法は次のとおりです:

l !--[if !supportLists]-->l コンテンツ変更トリガー キャッシュ (データ変更の検出後、キャッシュはそれに応じて更新されます)

l ->l

l ]-& gt; l & lt;!-[endif]-& gt; 配列をシリアル化します

& lt;-[if! ; l & lt;-[endif]-& gt; シリアル化された配列をファイルに保存します

[php]

plaincopy

$file = 'sql_cache.txt';  
$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);
ログイン後にコピー
sql_cache.txt ファイルを表示します。中身は次のようになります: a:1:{i:0;a:6: {i:0;s:1:"1";s:11:"category_id";s:1:"1";i:1;s:9: "コンピュータ";s:13:"カテゴリ名";s :9:

"コンピュータ" ;i:2;s:25:"コンピュータの説明";s:20:"カテゴリの説明"

;s:25: "コンピューターの説明";}}

この出力は、その変数と型の内部表現です。 mysql_fetch_array() 関数を使用して、数値インデックス付き配列と連想配列 (データが 2 回発生しているように見えるのはこのためです) を返し、一方は数値インデックスを持ち、もう一方は文字列インデックスを持っているとします。

キャッシュの使用:

キャッシュを使用するには、関数 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 = &#39;sql_cache.txt&#39;;  
$records = unserialize(implode(&#39;&#39;,file($file)));  
//现在你可以通过$records数组并且取得原始查询的数据:  
foreach ($records as $id=>$row) {  
    print $row[&#39;category_name&#39;]."<br>";  
}
ログイン後にコピー

$records は配列 (クエリ結果を含む数値インデックス列 - 各行は数値) であることに注意してください。文字列...なんとも混乱したもの)が連続して表示されます。

これらをまとめると:

この例では時間に基づいてキャッシュするかどうかを決定します。ファイル変更タイムスタンプが現在のタイムスタンプから有効期限タイムスタンプを引いたものより大きい場合はキャッシュが使用され、それ以外の場合はキャッシュが更新されます。 l !supportLists]-->l キャッシュ ファイルに保存されているレコードを取得するか、キャッシュ ファイルを更新します

[php]spanycopy

rreee

ditionalその他の可能性:

&lt; - [if!supportlists] - [if!supportlists] - &gt; L矛盾している場合は、キャッシュを更新します (この機能が実行される確率は 1/100 に設定できます)。ハッシュ アルゴリズム (MD5() など) は、文字列またはファイルが変更されたかどうかを判断するのに役立ちます。

l () 関数は false を返します)。 unlink() 関数を使用してファイルを削除できます。

スクリプト:

[php]

plaincopy を表示

$file = &#39;sql_cache.txt&#39;;  
$expire = 86400; // 24 小时 (单位:秒)
if (file_exists($file) &&   
filemtime($file) > (time() - $expire))  
{  
    // 取得缓存中的记录  
    $records = unserialize(file_get_contents($file));  
} else {  
    // 通过 serialize() 函数创建缓存  
}
ログイン後にコピー

以上がPHP データベース キャッシュ実装のアイデアの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート