(PECL mysqlnd_memcache >= 1.0.0)
mysqlnd_memcache_set — MySQL の接続を Memcache の接続と関連づける
$mysql_connection
[, Memcached $memcache_connection
[, string $pattern
[, callback $callback
]]] )
mysql_connection
と
memcache_connection
を関連づけます。
pattern
を PCRE 正規表現として使い、
callback
は通知用のコールバックとして使います。
あるいは、mysql_connection
との関連づけを解除します。
MySQL の接続と Memcache の接続を関連づけるときに、この関数は MySQL Server にその設定を問い合わせます。 サーバーの設定を自動検出し、InnoDB Memcache Daemon Plugin を使うのか MySQL Cluster NDB Memcache をサポートするのかを判断します。 また、サーバーに問い合わせて、エクスポートされたテーブルやその他の設定も自動検出します。 これらの自動的な設定の結果を取得するには、mysqlnd_memcache_get_config() を使います。
mysql_connection
MySQL サーバーへのハンドル。 PDO_MYSQL、mysqli あるいは ext/mysql のいずれかの MySQL API 拡張モジュールを利用するもの。
memcache_connection
Memcached のインスタンスで、
MySQL Memcache Daemon プラグインに接続させるもの。
このパラメータを省略した場合は、mysql_connection
と memcache の接続との関連づけを解除します。すでに別の接続と関連づけされている場合は、
その関連づけを上書きします。
pattern
Perl 互換の正規表現 形式のパターン。
memcache に渡すクエリーを見つけるときに使います。このパターンには三つのサブパターンが必要です。
最初のサブパターンにはリクエストするフィールドの一覧、
二番目のサブパターンにはクエリーが使う ID カラムの名前、
そして最後のサブパターンにはリクエストする値を指定します。
このパラメータを省略したり NULL
を渡したりした場合は、
デフォルトのパターンを使います。
callback
クエリーを MySQL に送るときに使うコールバック。 このコールバックは boolean のパラメータを一つ受け取ります。 これは、クエリが Memcache 経由で送られたかどうかを表します。
関連づけ、あるいはその解除が成功した場合に TRUE
、
エラーが発生した場合に FALSE
を返します。
例1 mysqlnd_memcache_set() で、 var_dump() をデバッグ用コールバックとして使う例
<?php
$mysqli = new mysqli("host", "user", "passwd", "database");
$memc = new Memcached();
$memc->addServer("host", 11211);
mysqlnd_memcache_set($mysqli, $memc, NULL, 'var_dump');
/* このクエリーは横取りされ、Memcache プロトコル経由で実行します */
echo "Sending query for id via Memcache: ";
$mysqli->query("SELECT f1, f2, f3 FROM test WHERE id = 1");
/* f1 は有効なキーフィールドとして設定されていないので、これは Memcache を使いません */
echo "Sending query for f1 via Memcache: ";
$mysqli->query("SELECT id FROM test WHERE f1 = 1");
mysqlnd_memcache_set($mysqli);
/* これで、通常の MySQL プロトコルを使うようになります */
echo "var_dump won't be invoked: ";
$mysqli->query("SELECT f1, f2, f3 WHERE id = 1");
?>
上の例の出力は以下となります。
Sending query for id via Memcache: bool(true) Sending query for f1 via Memcache: bool(false) var_dump won't be invoked: