Answers:
您已经很清楚第一个问题的答案:的意图ADD
是仅在键不存在时才起作用,而键可以在SET
那里更新值,而不管其是否已存在。如果您熟悉SQL,它(大致)就像INSERT
查询(ADD
)和UPDATE
(SET
)之间的区别。
关于您的附录问题,将使用适合您目的的任何一种。我会说这SET
是更常见的操作,因为更常见的是您只想说“我希望键foo
具有值bar
,而我不在乎它是否已经存在”。但是,在某些情况下(不太频繁),有必要知道缓存中还没有密钥。
想到的一个ADD
合适的示例是将会话存储在内存缓存中(顺便说一句,我不建议这样做)-如果您随机生成会话ID(或通过哈希生成),则不需要使用与现有会话相同的密钥来创建新会话,因为这将授予一个用户访问另一用户数据的权限。在这种情况下,创建会话时,将使用ADD
,如果会话返回失败状态,则需要生成一个新的会话ID,然后重试。当然,更新会话将SET
在用户浏览应用程序时使用。
REPLACE
甚至还不是SQL ...那是“ MySQL能够从SQL松散地激发出来的语言”(笑)
除了上述用户ID'womble'的答案外,还请考虑以下几点:
带有“设置”而不是“添加” 的竞争条件的可能性。参见以下链接至尼克·约翰逊的答案:https : //stackoverflow.com/questions/13234556/using-memcache-add-instead-of-set
如果您知道“添加”可以,请不要使用“设置”。这是为了避免通过网络发送数据,因为这些是RPC调用。几乎所有时间都被网络流量消耗,而不是在内存缓存中寻找键值对。因此,如果您可以避免最好的网络流量,那么在这种情况下,您的响应时间将会更快。
请参阅Appstats(https://developers.google.com/appengine/docs/python/tools/appstats(由Google提供)),并进一步了解上述第2点,请观看http://www.youtube.com/watch Guido Van Rossum(@Google)的?v = bvp7CuBWVgA