PHP 会话和 memcacheD

2022-08-31 01:16:25

每个人都知道PHP上有两个memcache扩展:

  • 记忆缓存
  • memcached

您可以使用memcache PHP扩展作为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使用这些变量时如何设置它们。


答案 1

在查看了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条目列表,其中:p ort是可选的。

蔡富贵 说:Web 上是否有解释在 host:port 之后出现的每个连接参数的引用?例如,“timeout=1”到底是什么意思?

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

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

2) 客户端中是否有故障转移支持?

安德烈 说:弗兰克,我正在开发memcached扩展的下一个版本(2.0)。它将具有 UDP 支持和复制(故障转移)。

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


答案 2

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

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


推荐