在 Memcached 中添加与设置

use*_*171 17 memcached

我不明白 ADD 和 SET 之间的区别有什么线索吗?似乎 ADD 包含 SET 或者如果存在某些东西并且 SET 只是覆盖,则 ADD 返回 false 。谢谢!

编辑:我的具体问题是,“你什么时候使用添加而不是设置或设置而不是添加?”

wom*_*ble 22

您几乎已经得到了第一个问题的答案:目的ADD是仅在键不存在时才起作用,同时SET更新值,而不管它是否已经存在。如果您熟悉 SQL,它(大致)就像INSERT查询 ( ADD) 和UPDATE( SET)之间的区别。

关于您的附录问题,您将使用适合您目的的任何一个。我会说这SET将是更常见的操作,因为更常见的是您只想说“我希望密钥foo具有 value bar,我不在乎它是否已经在那里”。但是,在某些情况下(不太频繁)有必要知道某个键不在缓存中。

想到什么时候ADD合适的一个例子是将会话存储在内存缓存中(顺便说一下,我不推荐这样做)——如果你随机生成你的会话 ID(或通过散列),你不会想要使用与现有会话相同的密钥创建新会话,因为这将授予一个用户访问另一个用户数据的权限。在这种情况下,当您创建会话时,您将使用ADD,如果它返回失败状态,您将需要生成一个新的会话 ID 并重试。当然,更新会话将SET在用户通过您的应用程序工作时使用。

  • 因此使用“大致”一词。如果你想要*真正*吹毛求疵,`REPLACE` 甚至不是 SQL...它是“MySQL 理解的受 SQL 松散启发的语言”(咧嘴笑) (2认同)