8

我有一个 REST API,我想在其中缓存索引的 JSON 响应 (GET /foo) 和读取操作 (GET /foo/1) 以显着提高性能。当资源上有 POST 或 PUT 时,索引和读取结果的缓存条目需要过期,因此不会提供旧内容。

这是最好使用 Squid / Varnish 之类的反向代理完成的场景,还是您会选择 memcache(d)?

4

3 回答 3

9

使用位于 HTTP 层的反向代理更加透明。这意味着可以通过网络查看正在发生的事情。不好的是,其中很少有人支持缓存经过身份验证的响应,因此如果您的资源需要身份验证,它们的效率可能会下降到 0。/foo当完全不相关的资源 B ( /foo/1) 被修改时,反向代理通常也不会自动使资源 A ( ) 过期。这是您必须以某种方式添加到解决方案中的正确行为。

如果使用 memcached,这两个问题都可以解决,因为它没有透明度要求。

于 2010-09-03T15:37:40.380 回答
2

我会选择像 varnish 这样的反向代理,因为您可以在不涉及缓存逻辑的情况下实现(和测试)您的服务,并将缓存添加为单独的层。您可以升级/重新启动您的服务,同时 varnish 为 GET 请求提供旧结果(非常适合可用性),并且很容易在 varnish 中设置规则以根据特定的 GET/POST 操作使现有缓存结果无效(清除)。

于 2010-09-17T07:52:35.203 回答
1

如果你想使用分布式内存,memcached 是一个很好的解决方案。https://github.com/cpatni/middleman是一个反向代理,它使用 memcached 进行缓存。

于 2010-11-19T23:13:16.800 回答