libmemcached是否对对象进行本地缓存?另一种问题是,对memcached_get()的调用和通过网络发出的请求之间是否存在1:1的对应关系?如果我连续两次请求对象“A”,它是否发出2个请求?
如果没有进行任何缓存,是否有优选的方法或库来进行缓存?
编辑:@ mikewied下面的回答显示可能还有更多的解释。我的用例如下:我将在缓存中存储的数据是不可变的,所以我不必担心失效;客户端(进程内)缓存的需求是由应用程序将重复访问大量缓存对象这一事实驱动的,因此每次都会导致网络往返最终导致应用程序速度下降。
答案 0 :(得分:1)
libmemcached不进行任何缓存,如果你想这样做,那么你可能需要自己实现一些东西。我讨论是否只是将此作为评论发布,因为我没有为客户端缓存库提供任何建议,但我决定发布作为答案,因为我很好奇为什么客户端缓存如此重要你的申请(以及其他可能也在阅读这个问题的人)。首先,如果你这样做,你将遇到缓存失效问题。想象一下,两个客户端将数据设置到同一个memcached服务器。如果您的客户不同步,他们将提供冷数据。显然,你可以在存储客户端的每个值上使用ttl,但是你仍然会有一些不一致的地方。也许这没关系,但是你必须问问自己,memcached为你提供的亚毫秒延迟是否对你的应用来说太慢了。另请注意,您的用户可能远离您的数据中心,一旦离开您的应用程序,可能需要一两秒才能获得数据。在这种情况下,考虑到所有其他增加的延迟,亚毫秒真的太慢了吗?我要提到的最后一件事是,如果你在正确的硬件上设置memcached并正确编写你的应用程序,你可以在商用硬件上做200,000 ops / sec。我甚至看到人们在一台服务器上完成了超过500,000次操作/秒的基准测试。这意味着在重载memcached之前,您更有可能使网络饱和。 (也许这是你试图避免的问题)
无论如何,我知道这可能不是你想要的答案,但是我看到很多人最近都要求客户端缓存,在很多情况下我只是没有&#39了解为什么人们认为这是必要的。要明确的是,为什么你可能想要添加你的应用程序是有充分理由的,但我认为有人会考虑添加它应该真正试图弄清楚它是否必要。我希望这并不是那么严厉。我的意思是说它有用。您可能拥有完美的用例,如果是这样,那么也许其他人会发现我在这里添加的一些有用的东西。