PHP会话和memcacheD

时间:2011-07-12 17:57:44

标签: apache memcached php

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

  • 内存缓存
  • 分布式缓存

您可以将PHP扩展的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使用时如何设置这些变量的文档或示例。

2 个答案:

答案 0 :(得分:8)

在查看了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?persistent=1&timeout=1&retry_interval=15”)

     

安德烈说: @Ash,不,这不是那么先进。目前,语法是libmemcached解析器支持的默认语法:基本上,以逗号分隔的hostname:port条目列表,其中:port是可选的。

OR

  

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

     

安德烈说: @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 =”和“--SERVER”中附加((我不知道它将如何使用)< / p>

答案 1 :(得分:3)

您需要编写自己的会话处理程序并围绕它包装Memcache(d)方法。

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