此页面提到应该使用 replace 而不是 set,但没有给出原因。我能找到的最佳信息是在 set 页面上的“argyleblanket”的评论。(https://php.net/manual/en/memcache.set.php#84032)
“对于同一个键使用 set 多次似乎会导致意外的结果 - 它不会像“替换”一样工作,而是似乎会为同一个键“设置”多个值。get 可能返回这些值中的任何一个。
这在多服务器设置中进行了测试 - 如果您只有一台服务器,行为可能会有所不同。 ”
(PECL memcache >= 0.2.0)
Memcache::replace — 替换现有项目的 value
Memcache::replace() 应该用于用 key
替换现有项目的 value。如果具有此键的项目不存在,Memcache::replace() 将返回 false
。对于其余部分,Memcache::replace() 的行为类似于 Memcache::set()。您也可以使用 memcache_replace() 函数。
key
将与项目关联的键。
var
要存储的变量。字符串和整数按原样存储,其他类型则序列化后存储。
flag
使用 MEMCACHE_COMPRESSED
以压缩形式存储项目(使用 zlib)。
expire
项目的过期时间。如果为零,则该项目永不过期。您也可以使用 Unix 时间戳或从当前时间开始的秒数,但在后一种情况下,秒数不得超过 2592000(30 天)。
示例 #1 Memcache::replace() 示例
<?php
$memcache_obj = memcache_connect('memcache_host', 11211);
/* 过程式 API */
memcache_replace($memcache_obj, "test_key", "some variable", false, 30);
/* OO API */
$memcache_obj->replace("test_key", "some variable", false, 30);
?>
此页面提到应该使用 replace 而不是 set,但没有给出原因。我能找到的最佳信息是在 set 页面上的“argyleblanket”的评论。(https://php.net/manual/en/memcache.set.php#84032)
“对于同一个键使用 set 多次似乎会导致意外的结果 - 它不会像“替换”一样工作,而是似乎会为同一个键“设置”多个值。get 可能返回这些值中的任何一个。
这在多服务器设置中进行了测试 - 如果您只有一台服务器,行为可能会有所不同。 ”