Php Memcache中的replace函数有什么意义?

Php Memcache中的replace函数有什么意义?,php,memcached,Php,Memcached,如果您可以只使用set,那么PHP memcache中的replace函数有什么意义?即使有变量,set也会自动替换它,对吗 你能给我举个例子,用替换代替集合更好吗 谢谢。根据PHP.net: 下面是ZoFreX的回答,如果你看这里的评论: 您将看到以下内容: 对同一个键多次使用set似乎会产生意外的结果—它的行为不象“替换”,而是似乎为同一个键“设置”了多个值。“get”可以返回任何值 这是在多服务器设置上测试的-如果只有一台服务器,行为可能会有所不同 因此真正的replace()将首先查

如果您可以只使用set,那么PHP memcache中的replace函数有什么意义?即使有变量,set也会自动替换它,对吗

你能给我举个例子,用替换代替集合更好吗

谢谢。

根据PHP.net:


下面是ZoFreX的回答,如果你看这里的评论:

您将看到以下内容:

对同一个键多次使用set似乎会产生意外的结果—它的行为不象“替换”,而是似乎为同一个键“设置”了多个值。“get”可以返回任何值

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

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

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

不,那完全错了


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

通常,如果密钥可能经常使用,则应使用replace。Set/add/etc创建一个全新的条目,并可能导致碎片和大量清理。Replace可重用已分配的内存(如果可能的话),并且可以更稳定、更高效。如果失败,使用add/set仍然有效。

嗯,上面说:“Memcached::replace()类似于Memcached::set(),但是如果服务器上不存在密钥,操作就会失败。”你能解释一下@night的第二个问题吗?关于什么时候使用
replace
而不是
set
,恐怕我不能给出一个例子,我从来都不需要使用replace()。您能解释一下如何使用它来实现替换,以及为什么这是正确的解决方案吗?当您说“这完全是错误的”时,您指的是什么?