(PECL mysqlnd_memcache >= 1.0.0)
mysqlnd_memcache_set — Связать соединение MySQL с соединением Memcache
$mysql_connection
, Memcached $memcache_connection
= ?
, string $pattern
= ?
, callable $callback
= ?
) : bool
Связывает mysql_connection
с
memcache_connection
, используя шаблон
pattern
как регулярное выражение PCRE и
callback
в качестве callback-функции для
оповещения, или разрывает связь с mysql_connection
.
Во время связывания соединения MySQL с соединением Memcache, эта функция запросит у сервера MySQL его конфигурацию. Это позволяет автоматически определить, сконфигурирован ли сервер с поддержкой плагина InnoDB Memcache Daemon или поддержкой MySQL Cluster NDB Memcache. Также сервер будет запрошен на предмет автоматической идентификации экспортированных таблиц и прочих настроек. Результаты автоматической настройки можно посмотреть с помощью mysqlnd_memcache_get_config().
mysql_connection
Соединение MySQL с помощью одного из модулей MySQL API для PHP: PDO_MYSQL, mysqli или ext/mysql.
memcache_connection
Экземпляр Memcached, соединённый с
плагином MySQL Memcache Daemon. Если этот параметр пропущен, то
mysql_connection
будет отвязано от всех соединений с
memcache. Если существовала предыдущая привязка, то она будет заменена.
pattern
Регулярное выражение PCRE (Perl Compatible
Regular Expression) для идентификации потенциальных запросов к
Memcache. Запрос должен иметь три подшаблона. Первый подшаблон
содержит список запрошенных полей, второй содержит ID столбца из запроса, а третий
- запрошенное значение. Если параметр опущен или установлен как null
, то
будет использован шаблон по умолчанию.
callback
Callback-функция, которая будет запущена при отправке запроса к MySQL. Эта функция принимает один параметр типа bool, который определяет, был ли запрос отправлен с через Memcache.
true
, если связывание или разрыв связи прошли успешно. false
в случае возникновения ошибки.
Пример #1 Пример использования mysqlnd_memcache_set() с var_dump() в качестве отладочной callback-функции.
<?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 "Запрос с полем id через Memcache: ";
$mysqli->query("SELECT f1, f2, f3 FROM test WHERE id = 1");
/* f1 не сконфигурирован как корректный ключ поля, так что послать это через Memcache нельзя */
echo "Запрос с полем f1 через Memcache: ";
$mysqli->query("SELECT id FROM test WHERE f1 = 1");
mysqlnd_memcache_set($mysqli);
/* Теперь будет использован обычный протокол MySQL */
echo "var_dump не будет вызван: ";
$mysqli->query("SELECT f1, f2, f3 WHERE id = 1");
?>
Результат выполнения данного примера:
Запрос с полем id через Memcache: bool(true) Запрос с полем f1 через Memcache: bool(false) var_dump не будет вызван: