如果你可以使用set,PHP memcache中的替换功能有什么意义?即使有变量,set也会自动替换它,对吗?
你能给我一个例子,其中最好使用replace而不是set吗?
感谢。
答案 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。