Apache PHP会话和memcacheD

Apache PHP会话和memcacheD,apache,memcached,php,Apache,Memcached,Php,大家都知道PHP上的memcache有两个扩展: 内存缓存 memcached 您可以使用memcache作为PHP的会话处理程序,如下所示: session.save_handler = memcache session.save_path = "tcp://serv01:11211,tcp://serv02:11211,tcp://serv03:11211" 或者您也可以像这样使用memcached: session.save_handler = memcached session.s

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

  • 内存缓存
  • memcached
您可以使用memcache作为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_分布
  • Memcached::OPT_重试_超时
  • Memcached::OPT_CONNECT_超时
在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);

但到目前为止,我还没有找到任何文档或示例,说明如何在会话处理程序使用这些变量时设置这些变量。

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


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

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

安德烈说:@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是可选的

Rich Choy说:Web上是否有一个参考来解释出现在host:port之后的每个连接参数?例如,“超时=1”的确切含义是什么

安德烈说:@Rich,你用的是哪个扩展?:)我的不支持这些额外的参数,你一定是在说pecl/memcache-one

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

2) pecl/memcached是否在客户端提供故障切换支持

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


如果您检查版本2的源代码,您可以看到例如,您可以在save_路径字符串“PERSISTENT=”和“--SERVER”(我不知道如何使用它)中附加

如果我没有其他答案,我会接受你的答案,但我真的希望避免编写自己的会话处理程序。没有其他方法可以解决这个问题。下面是一个使用PHP和memcached的开箱即用实现。