【问题标题】:Why does Memcached add() always succeed, regardless of expire time?为什么无论过期时间如何,Memcached add() 总是成功?
【发布时间】:2014-08-13 00:04:05
【问题描述】:

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

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

但是当我在不同的会话中调用它时它总是成功的,甚至在 20 秒过去之前。根据http://php.net/manual/en/memcached.add.php 的文档,它应该返回 FALSE,直到密钥过期(因为密钥已经存在)。

我在具有大量可用缓存空间的单个开发服务器上运行。知道会发生什么吗?

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

【问题讨论】:

    标签: php memcached


    【解决方案1】:

    如果您使用Memcache 类或Memcached 类,则需要区分。你的缓存设计有点奇怪。您应该检查缓存以首先查看该项目是否存在。如果该项目不是然后存储它。 Memcache 在使用布尔类型作为第三个参数时也有一些奇怪的行为。你应该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);
    

    【讨论】:

    • 感谢您的回答。我正在使用Memcached::add,因为我希望这个操作是原子的。密钥过期后,我只希望一个脚本成功添加密钥,其他任何尝试都将失败,直到下次密钥过期。
    猜你喜欢
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多