【问题标题】:PHP session and memcacheDPHP 会话和 memcacheD
【发布时间】:2011-07-12 17:57:43
【问题描述】:

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

  • 内存缓存
  • 内存缓存

您可以使用 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 使用这些变量时设置这些变量。

【问题讨论】:

标签: apache memcached php


【解决方案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")

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

Rich Choy 说: 网络上是否有参考解释出现在 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=”和“--SERVER”((我不知道它会如何使用)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 如果我没有其他答案,我会接受你的,但我真的很想避免编写自己的会话处理程序。
    • 没有其他办法。
    猜你喜欢
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 2023-03-15
    • 2017-07-30
    • 2014-02-08
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多