替换函数在Memcache中的作用是什么?


What is the point of replace function in Memcache?

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

你能给我举个例子,用replace代替set更好吗?

谢谢。

根据PHP.net:

Memcached::replace()类似于Memcached::set(),但如果密钥在服务器上不存在,则操作失败。

如果你看看这里的评论,就会发现ZoFreX的回答如下:http://www.php.net/manual/en/memcache.set.php

您将看到以下内容:

对同一个键多次使用set似乎会产生意想不到的结果——它不像"replace,"但相反,似乎是"设定"。同一键有多个值。"get"可以返回任意值

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

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

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

一般来说,如果密钥可能经常被使用,则应该使用replace。Set/add/etc会创建一个全新的条目,并可能导致碎片化和大量的清理工作。Replace重用已经分配的内存(如果可能的话),并且更加稳定和高效。

不,这完全是错误的。

如果你想检查和设置一个值,你必须使用GETS + CAS