mysqlnd_memcache_get_config

(PECL mysqlnd_memcache >= 1.0.0)

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

説明

mysqlnd_memcache_get_config ( mixed $connection ) : array

この関数は、MySQL 接続にアタッチされた mysqlnd_memcache 関連のすべての設定情報を配列で返します。 MySQL、mysqlnd_memcache_set() で渡した Memache オブジェクト、 自動的に MySQL サーバーから取得したテーブルマッピング情報などが含まれます。

パラメータ

connection

MySQL サーバーへのハンドル。 PDO_MYSQLmysqli あるいは ext/mysql のいずれかの MySQL API 拡張モジュールを利用するもの。

返り値

成功した場合に mysqlnd_memcache の設定情報の配列、それ以外の場合に FALSE を返します。

返される配列にはこれらの要素が含まれます。

mysqlnd_memcache_get_config() が返す配列の構造
配列のキー 説明
memcached この MySQL 接続に mysqlnd_memcache_set() で関連づけた Memcached のインスタンス。 これを使って memcache 接続の設定を変更することもできるし、 この接続上のサーバーに直接問い合わせて設定を変更することもできます。
pattern サーバーに送信された SQL クエリーにマッチさせるための PCRE 正規表現。 このパターンにマッチするクエリーをさらに分析し、 そのクエリーを横取りして memcache インターフェイスに送るのか 普通の MySQL プロトコルでサーバーに送るのかを判断します。 デフォルトのパターン (MYSQLND_MEMCACHE_DEFAULT_REGEXP) を使うか、あるいは mysqlnd_memcache_set() でパターンを設定します。
mappings プラグイン側から探す、すべての設定済みコンテナの一覧を含む連想配列。 要素のキーが、MySQL の設定内のコンテナ名になります。 その値については後で説明します。このフィールドの中身を作るには、 mysqlnd_memcache_set() で MySQL と memcache の接続を関連づけるときに MySQL Server に問い合わせます。
mapping_query mysqlnd_memcache_set() で、利用可能なコンテナとマッピングを識別するときに使う SQL クエリー。 このクエリーの結果を mappings 要素に渡します。
mappings エントリの構造
配列のキー 説明
prefix memcache 経由でデータにアクセスするときに使うプレフィックス。 MySQL InnoDB Memcache Deamon プラグインの場合、通常は @@ で始まって、最後は変更可能なセパレータになります。 このプレフィックスは、memcache プロトコルを使うときにキーの値の前に置かれます。
schema_name アクセスするテーブルを含むスキーマ (データベース) の名前。
table_name memcache プロトコルでアクセス可能なデータを含むテーブルの名前。
id_field_name memcache 経由でテーブルにアクセスするときに、キーとして使う id が含まれるフィールド (カラム) の名前。たいていは、主キーが設定されているフィールドとなります。
separator フィールドの値を分割するときに使うセパレータ。 memcache が単一の値にしかアクセスできないのに対して MySQL は複数のカラムをこの値に押し込めることができるので、 このセパレータが必要になります。

注意:

セパレータは MySQL Server で設定できますが、 memcache 経由できる値を使ってはいけません。 そんなことをしたら、きちんとしたマッピングが保証できなくなるからです。

fields このマッピングで利用可能なすべてのフィールド名の配列。

例1 mysqlnd_memcache_get_config() の例

<?php
$mysqli 
= new mysqli("host""user""passwd""database");
$memc = new Memcached();
$memc->addServer("host"11211);
mysqlnd_memcache_set($mysqli$memc);

var_dump(mysqlnd_memcache_get_config($mysqli));
?>

上の例の出力は以下となります。

array(4) {
  ["memcached"]=>
  object(Memcached)#2 (0) {
  }
  ["pattern"]=>
  string(125) "/^\s*SELECT\s*(.+?)\s*FROM\s*`?([a-z0-9_]+)`?\s*WHERE\s*`?([a-z0-9_]+)`?\s*=\s*(?(?=["'])["']([^"']*)["']|([0-9e\.]*))\s*$/is"
  ["mappings"]=>
  array(1) {
    ["mymem_test"]=>
    array(6) {
      ["prefix"]=>
      string(13) "@@mymem_test."
      ["schema_name"]=>
      string(4) "test"
      ["table_name"]=>
      string(10) "mymem_test"
      ["id_field_name"]=>
      string(2) "id"
      ["separator"]=>
      string(1) "|"
      ["fields"]=>
      array(3) {
        [0]=>
        string(2) "f1"
        [1]=>
        string(2) "f2"
        [2]=>
        string(2) "f3"
      }
    }
  }
  ["mapping_query"]=>
  string(209) "    SELECT c.name,
                          CONCAT('@@', c.name, (SELECT value FROM innodb_memcache.config_options WHERE name = 'table_map_delimiter')) AS key_prefix, 
                          c.db_schema, 
                          c.db_table, 
                          c.key_columns, 
                          c.value_columns, 
                          (SELECT value FROM innodb_memcache.config_options WHERE name = 'separator') AS sep 
                     FROM innodb_memcache.containers c"
}

参考