MySQL の接続を Memcache の接続と関連づける

# mysqlnd_memcache_set

(PECL mysqlnd_memcache >= 1.0.0)

mysqlnd_memcache_set — MySQL の接続を Memcache の接続と関連づける

### 説明

mysqlnd_memcache_set ( mixed `$mysql_connection` [, Memcached `$memcache_connection` [, string `$pattern` [, callback `$callback` ]]] ) : bool

`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:

### 参考

- mysqlnd_memcache_get_config() - プラグインの設定情報を返す