我有一个简单的例子,我将值设置为5秒。问题是5秒后;当我预期'假'时,我仍然会得到一个值。
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect");
$memcache->set('foo', 'bar', 0, 5); // 5 seconds expiry
var_dump($memcache->get('foo')); // bar
sleep(10);
var_dump($memcache->get('foo')); // still shows bar
这是memcache服务器版本
服务器版本:1.4.13
答案 0 :(得分:5)
游戏的后期,但是在你的代码中,看起来你传递的是“0”(不是“5”),这意味着“永不过期”具体来说:
$memcache->set('foo', 'bar', 0, 5); // 5 seconds expiry
应该是:
$memcache->set('foo', 'bar', 5); // 5 seconds expiry
除非我误解the PHP documentation located here,这表明set命令有三个参数:
public bool Memcached::set ( string $key , mixed $value [, int $expiration ] )
编辑:哎呀,我看到你正在使用Memcache扩展而不是Memcached,which does have four parmaters。也许尝试使用MEMCACHE_COMPRESSED常量而不是0来查看它是否有效:
$memcache->set('foo', 'bar', MEMCACHE_COMPRESSED, 5); // 5 seconds expiry
答案 1 :(得分:1)
由于代码看起来很好 - 接下来的链接就是查看你的memcache PHP扩展版本无法正常工作,或者看看memcached服务器本身。
这很棘手。最简单的方法是首先排除memcached服务器。 (你可以安装一个php界面 - 但这对你的工作没有帮助。)所以......
在终端(或Windows中的命令窗口)中输入
telnet localhost 11211
(注意 - 默认情况下,Windows中未安装telnet客户端 - 转到“控制面板”,“打开或关闭Windows功能”并从那里添加。)
这使您可以访问memcached。
然后输入
stats items
列出了memcached中的内存项。
希望你只有一块板,所以请记下它的编号和类型
stats cachedump [Number] 0
这将列出缓存中记录的内容。
如果这仍显示“bar”(采用编码格式),那么它的memcached服务器无法正常工作 - 升级为新版本。
如果这不显示“bar”(或者,最好,项目不存在 - 你会得到ERROR)然后它将是PHP的memcache扩展无法正常工作。再次,检查你的版本。
完成后,输入
quit
替代方法是检查“memcached”(php扩展)并用这些类重写PHP代码。它更新了。如果仍然失败,那肯定是memcached服务器;如果它的工作原理是它是php memcache扩展名。
答案 2 :(得分:0)
memcached服务器中存在一个错误,包括版本1.4.13到至少1.4.14,一旦memcached服务器运行了一段时间,它有时会进入一种模式,它将无法正确到期值。
重新启动服务为我修复了它,我希望新版本能够更加永久地修复它。