如果您可以使用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