Memcache中的替换功能有什么意义?

时间:2011-05-04 21:54:07

标签: php memcached

如果你可以使用set,PHP memcache中的替换功能有什么意义?即使有变量,set也会自动替换它,对吗?

你能给我一个例子,其中最好使用replace而不是set吗?

感谢。

4 个答案:

答案 0 :(得分:6)

答案 1 :(得分:4)

如果你看看这里的评论,请继续阅读ZoFreX的答案: http://www.php.net/manual/en/memcache.set.php

您将看到以下内容:

  

对同一个键使用多次设置似乎有意想不到的结果 - 它不表现为“替换”,而是似乎为同一个键“设置”多个值。 “get”可能会返回任何值。

     

这是在多服务器设置上测试的 - 如果您只有一台服务器,行为可能会有所不同。

所以真实而真实的replace()会首先查找现有密钥,然后替换它(如果存在),而set()只会添加密钥。我想最好先使用replace(),如果找不到密钥则返回FALSE,在这种情况下,您使用add()而不是set(),因为您知道肯定钥匙不存在。这可确保您不会发生任何意外事故。所以你的代码可能是这样的:

$replace = Memcached::replace($key, $var);
if ( ! $replace)
{
    $set = Memcached::add($key, $var);
}

答案 2 :(得分:1)

通常,如果密钥可能经常使用,则应使用替换。设置/添加/ etc会创建一个全新的条目,并可能导致碎片化和大量清理。替换重用已经分配的内存(如果可能),并且可以更稳定和有效。如果失败,使用添加/设置仍然有效。

答案 3 :(得分:0)

不,这完全错了。

如果要检查并设置值,则必须使用GETS + CAS。