PHP : apc_store doesn't work as intended

标签 php caching apc

我已经开始尝试 APC 在每个网络服务器上存储一些特定的数据,作为对 memcached 的补充。

但是,下面的代码片段让我很头疼:

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

// Echoes: value

内存缓存示例:

$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 (虽然不是最有效的)

最佳答案

这似乎是一个已知问题: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";

尝试一下,取消对第二行的注释,您会发现它确实覆盖了先前请求中设置的 key ,但您只能在每个请求中存储一次给定的 key 。

错误日志提到了一个 ini 文件设置 apc.slam_defense,当设置为 Off 时,可能会禁用这种单次写入行为。但是我简单地尝试了一下,但我无法确认它是否有效。也许你会更幸运(记得在更改 php.ini 时重新启动 Apache)。

关于PHP : apc_store doesn't work as intended,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2915774/

相关文章:

php - 如何自动更新网页的URI?

C++ 设置使用线性探测?

java - java中只使用key对象的引用的缓存(而不是hashCode或equals)

php - APC 操作码缓存的工作原理

PHP apc 存储 apc 删除然后 apc 存储返回失败

php - 使用 Eloquent 获取表格的最后 25 行

php - mysql查询,如何进行?

php - 无法使搜索栏在标题中居中

javascript - 强制浏览器仅在更改后重新加载 css/js

php - 使用 Drupal 配置 APC