【问题标题】:Redis / Memcached ReST caching for an external service用于外部服务的 Redis / Memcached ReST 缓存
【发布时间】:2015-12-28 17:48:29
【问题描述】:

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

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

我想做的是,使用 memcached 或 Redis,当数据请求从 UI 进入 Web 后端时,从 Web 应用程序后端调用报表服务器以获取指定的报告,将数据转换为适当的格式以供 UI 使用,使用时间戳对其进行缓存,并将其返回给 UI,以便后续请求将在 Web 应用程序后端的内存中可用,而无需重新请求从报表服务器。如果缓存报告的保存时间超过指定时间,我还需要检查此时间戳并发出新请求。将被缓存的数据非常少,只是一些小的 JSON 对象,只有少数值保存 UI 所需的信息,而且这些对象并不多,如果它们都可以轻松存储在内存中,我不会感到惊讶一次,所以时间戳是唯一需要的失效。

在缓存/memcached/Redis 方面,我在这里的经验几乎为零。两者有优势吗?这样的事情可能吗?我将如何实施呢?还有其他选择吗?

感谢您的帮助!

【问题讨论】:

    标签: rest caching web redis memcached


    【解决方案1】:

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

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

    此外,如果您发现您的数据库是一个瓶颈,您可能只需将其配置为更积极地缓存即可。

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

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

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

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

    【讨论】:

    • 谢谢!是的,我考虑过普通文件,但我觉得 Memcached 或 Redis 可能是简化事情的正确选择。我对 Redis 很感兴趣,因为它是我将来可能想学习的东西。但似乎 Memcached 是我在这种情况下要走的路。服务器端缓存是必要的,因为生成报告的服务器是由第三方开发的,不打算面向公众,并且开发人员表示他们不想处理我们预期的请求量。非常感谢您的回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2018-09-02
    • 2022-11-03
    • 1970-01-01
    • 2017-03-29
    • 2015-08-15
    相关资源
    最近更新 更多