2010-05-26 58 views
8

我已经开始尝试使用APC在每个网络服务器上存储一些特定数据作为memcached的补充。PHP:apc_store无法正常工作

但是,下面这段代码是给我头痛:

echo apc_store('key', 'value'); 
echo apc_store('key', 'newvalue'); 
echo apc_fetch('key'); 

// Echoes: value 

Memcached的例子:

$memcached = new Memcached; 

$memcached->addServer('localhost', '11211'); 

$memcached->set('key', 'value1'); 
echo $memcached->get('key') . '<br />'; // Echoes value1 

$memcached->set('key', 'value2'); 
echo $memcached->get('key'). '<br />'; // Echoes value2 

$memcached->set('key', 'value3'); 
echo $memcached->get('key'). '<br />'; // Echoes value3 

为什么apc_store没有正常工作?

编辑: 为了确保没有其他人在寻找一个解决方案,如果这是由错误造成的,这里有一个花两小时。http://pecl.php.net/bugs/bug.php?id=16894&edit=1(不是最有效的,虽然)

回答

7

这似乎是一个已知的问题:PECL Bug #16814 New warning "Potential cache slam averted for key"

它似乎只允许每个请求一个apc_store()。我想这个测试:

<?php 

echo "<p>apc_fetch(key): " . apc_fetch('key') . "</p>\n"; 
// echo "<p>apc_store(value): " . apc_store('key', 'value') . "</p>\n"; 
echo "<p>apc_store(newvalue): " . apc_store('key', 'newvalue') . "</p>\n"; 
echo "<p>apc_fetch(key): " . apc_fetch('key') . "</p>\n"; 

玩这个,取消注释第二行,看,它并覆盖在先前请求一键设定,但你只能存储每个请求一次给定的键。

错误日志提到了一个ini文件设置apc.slam_defense,当设置为Off时可能会禁用此单写行为。但是我试了一下,我无法证实这个作品。也许你会有更多的运气(记住当你改变php.ini时重新启动Apache)。

+0

可以想象这是一件奇怪的事情。谢谢你的帮助,比尔! – Industrial 2010-05-26 20:05:11

+0

顺便说一下,前一段时间我在这里问过你的mySQL树有点松懈。你说你要在Github上提供一些树例子。那里有什么新东西? – Industrial 2010-05-26 20:06:02

+0

更新了我的文章,提供了一个解决方案的链接,可以帮助你或者陷入相同情况的其他人,并且必须使用APC – Industrial 2010-05-26 20:41:26