PHP сессия и memcacheD - PullRequest
       3

PHP сессия и memcacheD

16 голосов
/ 12 июля 2011

Всем известно, что в PHP есть два расширения для memcache:

  • Memcache
  • Memcached

Вы можете использовать memcache расширение PHP в качестве обработчика сеанса для PHP следующим образом:

session.save_handler = memcache
session.save_path = "tcp://serv01:11211,tcp://serv02:11211,tcp://serv03:11211"

Или вы можете использовать memcached так:

session.save_handler = memcached
session.save_path = "serv01:11211,serv02:11211,serv03:11211"

Но как установить другие параметры для memcached, такие как:

  • Memcached :: OPT_DISTRIBUTION
  • Memcached :: OPT_RETRY_TIMEOUT
  • Memcached :: OPT_CONNECT_TIMEOUT

В PHP я сделаю так:

$cache = new Memcached();
$cache->addServer('serv01', 11211);
$cache->addServer('serv02', 11211);
$cache->addServer('serv03', 11211);
$cache->setOption(Memcached::OPT_HASH, Memcached::HASH_MD5);
$cache->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
$cache->setOption(Memcached::OPT_CONNECT_TIMEOUT, 150);
$cache->setOption(Memcached::OPT_RETRY_TIMEOUT, 0);

Но до сих пор я не нашел никакой документации или примеров того, как установить эти переменные, когда они используются сессионным обработчиком.

Ответы [ 2 ]

8 голосов
/ 13 июля 2011

Посмотрев исходный код как расширения PECL, так и самого libmemcached, я наконец нашел свой ответ в комментарии к блогу автора расширения memcached.

http://zmievski.org/2009/01/new-memcached-extension

Я цитирую, если его блог когда-нибудь исчезнет:

Андрей сказал: @Ash, синтаксис пути сохранения сеанса не совсем такой же, как у другого расширения memcache.Попробуйте:

session.save_path = "127.0.0.1:11211"

Эш Сирл сказал: Есть ли какая-либо документация по синтаксису - т.е. он обрабатывает несколько серверов инеобязательные параметры, такие как более ранние реализации memcache?(например, save_path = "127.0.0.1:11211?persistent=1&timeout=1&retry_interval=15")

Андрей сказал: @ Ах, нет, это не так уж и сложно.На данный момент синтаксис по умолчанию поддерживается синтаксическим анализатором libmemcached: в основном, список разделенных запятыми имен хостов: записей портов, где: порт не обязателен.

ИЛИ

Рич Чой сказал: Есть ли в Интернете ссылка, объясняющая каждый параметр соединения, который появляется после host: port?Например, что именно означает «timeout = 1»?

Андрей сказал: @Rich, какое расширение вы используете?:) Мой не поддерживает эти дополнительные параметры, вы должны говорить о pecl / memcache one.

AND

Фрэнк Орсон сказал: 1) Pecl / memcached поддерживает UDP на клиенте?Я не мог найти информацию об этом.Я знаю, что pecl / memcache 3.0.4 поддерживает его.

2) Есть ли у pecl / memcached поддержка отработки отказа в клиенте?

Андрей сказал: Фрэнк, я 'Я работаю над следующей версией (2.0) расширения memcached.Он будет иметь поддержку и репликацию UDP (аварийное переключение).

Если вы проверите исходный код версии 2, вы увидите, например, что вы можете добавить в строку save_path "PERSISTENT =" and "--СЕРВЕР "((который я не знаю, как он будет использоваться)

3 голосов
/ 13 июля 2011

Вам необходимо написать собственный обработчик сеанса и обернуть его в методы Memcache (d).

http://www.php.net/manual/en/function.session-set-save-handler.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...