PHP session and memcacheD


PHP session and memcacheD

大家都知道PHP的memcache有两个扩展:

  • memcache
  • memcached

你可以使用memcache作为PHP的session_handler,如下所示:

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);

但是到目前为止,我还没有找到任何文档或例子,如何设置这些变量时,他们是由session_handler使用

在查看了PECL扩展和libmemcached本身的源代码后,我终于在memcached扩展作者的博客评论中找到了我的答案。

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

如果有一天他的博客消失了,我引用一下:

Andrei说: @Ash,会话保存路径语法与其他memcache扩展不完全相同。试一试:

session.save_path = " 127.0.0.1:11211 "

Ash Searle说:是否有关于语法的文档-即它是否像早期的memcache实现一样处理多个服务器和可选参数?(如save_path = " 127.0.0.1:11211 ?持久= 1,超时= 1,retry_interval = 15")

Andrei说: @Ash,不,它没有那么高级。目前,该语法是libmemcached解析器支持的默认语法:基本上是一个逗号分隔的hostname:port条目列表,其中:port是可选的。

Rich Choy说:在Web上是否有一个参考解释出现在host:port之后的每个连接参数?例如,"timeout=1″"究竟是什么意思?

Andrei说: @Rich,你在用哪个扩展?:)我的不支持那些额外的参数,你一定是在说pecl/memcache。

Frank Orson说: 1) pecl/memcached在客户端支持UDP吗?我找不到任何关于这个的信息。我知道pecl/memcache 3.0.4支持它

2) pecl/memcached在客户端有故障转移支持吗?

Andrei说: Frank,我正在开发memcached扩展的下一个版本(2.0)。它将有UDP支持和复制(故障转移)。

如果你检查版本2的源代码,你可以看到,例如,你可以在save_path字符串中附加"PERSISTENT="answers"——SERVER"((我不知道它将如何使用)

您需要编写自己的会话处理程序,并在其周围封装Memcache(d)方法。

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