2

我可以将 memcachier 与 ZendFramework 1.12 一起使用吗?

我正在使用的提供商(AppFog)仅提供 Memcachier(Memcached 即将在 10 个月后推出)而且我的应用程序在启动时需要大量缓存。我不想坚持使用 APC,所以我没有其他好的选择。

4

1 回答 1

1

所以这只是现在的一半答案,我会尝试找出其余的。顺便说一句,我在 MemCachier 工作,所以如果您有更多问题,请发送电子邮件至 support@memcachier.com。

PHP 默认包含两个 memcache 绑定:memcache 和 memcached。第一个 (memcache) 是它自己的 memcache 协议实现,而第二个 (memcached) 是与 libmemcached C++ 库的 php 绑定。

如今,php 的 memcached 绑定确实支持 SASL(从 2.0.0 版开始)。遗憾的是,它没有记录在案。它也是 memcached 模块的可选部分,因此您需要确保它在您的机器(或 AppFog)上编译并启用 SASL 支持。大致做到这一点的步骤是:

  1. 安装 libmemcached。我使用的是 1.0.14 版本。
  2. 安装 php-memcached。确保在运行 ./configure 时将“--enable-memcached-sasl”选项传递给它。
  3. 在构建这两者时,您可以检查“./configure”的输出以确保确实启用了 SASL 支持,遗憾的是现在它可能很棘手。
  4. 编辑你的 php.ini 文件。将以下行放入其中:

    [memcached]
    memcached.use_sasl = 1
    

我使用自制软件在 OSX 10.8 上完成了所有这些工作。如果您是这种情况,则以下内容应该有效:

$ brew install libmemcached
$ brew edit php54-memcached 
    // you'll need to add the line: 
       args << "--enable-memcached-sasl"
    // to the brew file.
$ brew install php54-memcached

现在要实际使用 SASL 支持,这里有一个测试文件来演示它并且是一个很好的完整性检查。

<?php 
/**
 * Test of the PHP Memcached extension.
 */

error_reporting(E_ALL & ~E_NOTICE); 

$use = ini_get("memcached.use_sasl");
$have = Memcached::HAVE_SASL;
echo "Have SASL? $have\n";
echo "Using SASL? $use\n\n";

$mc = new Memcached(); 

$mc->setOption(Memcached::OPT_BINARY_PROTOCOL, true);

$mc->setSaslAuthData("user-1", "pass");

$mc->addServer("localhost", 11211); 

$mc->set("foo", "Hello!"); 
$mc->set("bar", "Memcached..."); 

$arr = array( 
    $mc->get("foo"), 
      $mc->get("bar") 
    ); 
var_dump($arr); 
?>

我现在还不知道如何让它在 Zend 框架中工作。我不熟悉它,所以可能需要一些时间来安装和弄清楚。尽管考虑到其中一个后端与 SASL auth 一起使用,但这似乎非常可行。

于 2013-01-03T01:36:14.073 回答