此页面提到应使用 replace 而不是 set,但没有说明原因。我能找到的最佳信息是“argyleblanket”在 set 页面的评论。(https://php.net/manual/en/memcache.set.php#84032)
“对同一键多次使用 set 似乎会产生意外结果 - 它并不像“替换”那样工作,而是似乎对同一键“设置”多个值。“get”可能会返回任何值。
这在多服务器设置中进行了测试 - 如果您只有一台服务器,则行为可能不同。
(PECL memcache >= 0.2.0)
Memcache::replace — 替换现有条目的值
Memcache::replace() 用于替换具有 key
的现有条目的值。如果不存在具有该键的条目,则 Memcache::replace() 返回 false
。其余情况下,Memcache::replace() 的行为与 Memcache::set() 类似。您也可以使用 memcache_replace() 函数。
键
与条目关联的键。
变量
要存储的变量。字符串和整数按原样存储,其他类型序列化后存储。
标志
使用 MEMCACHE_COMPRESSED
来压缩存储条目(使用zlib)。
过期时间
条目的过期时间。如果等于零,则条目永不过期。您也可以使用 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,但没有说明原因。我能找到的最佳信息是“argyleblanket”在 set 页面的评论。(https://php.net/manual/en/memcache.set.php#84032)
“对同一键多次使用 set 似乎会产生意外结果 - 它并不像“替换”那样工作,而是似乎对同一键“设置”多个值。“get”可能会返回任何值。
这在多服务器设置中进行了测试 - 如果您只有一台服务器,则行为可能不同。