Redis / Memcached 外部服务的 ReST 缓存

Redis / Memcached ReST caching for an external service

这里有关于缓存来自对外部 ReST 的调用的数据的问题 API。

目前设置了一个 ReST 服务来生成和检索 UI 必须使用的某些特定类型的报告。但是,此服务不适合大量使用,或暴露给 public,并且这些报告是相当静态的。可能每 10-20 分钟才更换一次。 Web 应用程序驻留在单独的服务器上。

我想做的是,使用 memcached 或 Redis,当数据请求从 UI 到达 Web 后端时,从 Web 应用程序后端进行调用到报表服务器以获取指定的报表,将数据转换为适合 UI 使用的格式,用时间戳缓存它,然后 return 它到 UI 所以后续请求将在 Web 应用程序后端的内存中可用,而无需从报表服务器重新请求。如果缓存报告的保存时间超过指定时间,我还需要检查此时间戳并发出新请求。将被缓存的数据非常小,只是一些较小的 JSON 对象,只有少数值保存 UI 需要的信息,而且这些对象并不多,如果它们都可以很容易地同时存储在内存中,因此时间戳是唯一必要的失效。

我在缓存/memcached/Redis 方面几乎没有经验。一个或另一个有优势吗?这样的事情可能吗?我将如何着手实施这个?还有其他选择吗?

感谢帮助!

服务器缓存这些类型的 RESTful 查询响应是很有可能而且很常见的。

对于任何基于服务器的缓存,您还应该认真考虑您是否真的需要它,就像它确实需要的那样 add complexity。它当然可以带来巨大的改进,但由于您的使用量很低,它实际上可能有点矫枉过正。您还可以使用 HTTP 缓存协议来避免在服务器上进行缓存的需要。如果数据不经常更改并且您正确使用 eTag 或修改日期,以及 AWS CloudFront 等中间代理,用户将很少会遇到这种延迟。

另外,如果您发现您的数据库是一个瓶颈,您可能只需将其配置为更积极地缓存就可以摆脱困境。

假设您确实想在内存中缓存...

对于服务器端缓存,通常的做法是将结果缓存一段时间或手动将其从缓存中清除。但在我看来,一种更现代、更好的方法是使用 Russian-doll caching,您可以根据输入更改的时间来键入项目。然后你永远不需要担心手动清除它们,你只需要确保时间戳是正确的和同步的。

Memcached 对比 Redis 对比其他东西?对于这种用法,Memcached 可能是最好的,因为它非常简单,而且您不必担心持久性,这是 Redis 相对于 Memcached 的一大优势。 Redis 设计精良,也能正常工作,但我看不到使用功能更丰富和复杂的东西的好处,如果你不需要它并且有一个很好的选择。也就是说,Redis 的一大优势是它现在具有出色的内置集群支持,因此易于扩展和保持在线状态。但这对您的用例来说太过分了。

还有别的吗?还有很多其他的内存数据库,但我认为如果你想避免依赖尖端框架而没有太多支持的问题,Memcached 和 Redis 可能是最好的。然而,还有 其他东西:无聊的旧文件。如果要生成报告,您可能需要考虑将它们生成为临时文件。如果您的 OS 正常工作,文件最终还是会被缓存。