为什么Memcached add()总是成功,无论过期时间如何?

时间:2014-08-13 00:04:06

标签: php memcached

我正在使用Memcached添加密钥,如下所示:

$valueToStore = time(); // some number
$success = $memcached->add( 'test_key', $valueToStore, 20 ); // cache for 20 seconds

但是当我在不同的会话中调用它时,它总是成功,即使在20秒之后也是如此。根据{{​​3}}的文档,它应该返回FALSE直到密钥到期(因为密钥已经存在)。

我在单个开发服务器上运行,并且有足够的可用缓存空间。知道可能会发生什么吗?

php -v返回:PHP 5.5.9-1ubuntu4.3
memcached版本2.1.0
libmemcached版本1.0.8。

1 个答案:

答案 0 :(得分:0)

如果您使用Memcache类或Memcached类,则需要区分。你的缓存设计有点奇怪。您应该检查缓存以首先查看该项目是否存在。如果该项目没有,则存储它。同样Memcache在使用boolen类型作为第三个参数时有一些奇怪的行为。你应该MEMCACHE_COMPRESSED。我认为您使用的是Memcache

说明如何解决问题:

$in_cache = $memcached->get('test_key');
if($in_cache)
  return $in_cache;
else
  $valueToStore = time();
  $memcached->add('test_key', $valueToStore, MEMCACHE_COMPRESS, 20);