MySQL の接続と Memcache の接続の関連づけを
mysqnd_memcache_set() で設定したら、
プラグインは透過的に、
SQL の SELECT 文を memcache へのアクセスに変換します。
そのため、このプラグインは実行されるすべての SQL 文を監視しており、
MYSQLND_MEMCACHE_DEFAULT_REGEXP
にマッチする文がないかどうかを探します。
マッチする文が見つかれば、mysqlnd memcache プラグインはその内容をチェックします。
SELECT がアクセスするカラムが
マップされているテーブルのものだけであること、
そして WHERE 句が単一キーのルックアップに限定されていることを確かめます。
この例の SQL テーブルの場合、プラグインは、 MySQL サーバーの Memcache インターフェイスを使って SELECT f1, f2, f3 WHERE id = n のような SQL クエリーの結果を取得します。
例1 基本的な例
<?php
$mysqli = new mysqli("host", "user", "passwd", "database");
$memc = new Memcached();
$memc->addServer("host", 11211);
mysqlnd_memcache_set($mysqli, $memc);
/*
これは test テーブルへの問い合わせです。WHERE 句のキーとして
id を使い、フィールド f1、f2 そして f3 にアクセスします。
そこで、mysqlnd_memcache はこれを横取りして memcache 経由で処理します。
*/
$result = $mysqli->query("SELECT f1, f2, f3 FROM test WHERE id = 1");
while ($row = $result->fetch_row()) {
print_r($row);
}
/*
これは test テーブルへの問い合わせですが、WHERE 句に f1 を使っています。
そのため、mysqlnd_memcache はこれを横取りしません。
MySQL プロトコルを使って処理します。
*/
$mysqli->query("SELECT id FROM test WHERE f1 = 'Lady'");
while ($row = $result->fetch_row()) {
print_r($row);
}
?>
上の例の出力は以下となります。
array( [f1] => Hello [f2] => World [f3] => ! ) array( [id] => 2 )