这里有关于从调用外部ReST API缓存数据的问题。
目前设置了ReST服务来生成和检索UI必须使用的某些特定类型的报告。但是,此服务不适用于大量使用,也不适用于公众,这些报告是相当静态的。可能每10-20分钟只更换一次。 Web应用程序驻留在单独的服务器上。
我想要做的是,使用memcached或Redis,当数据请求从UI进入Web后端时,从Web应用程序后端调用报表服务器获取指定的报告,将数据转换为适当的UI格式,使用时间戳缓存它,然后将其返回到UI,以便后续请求可以在Web应用程序后端的内存中使用,而无需重新请求从报表服务器。如果缓存的报告持续时间超过指定时间,我还需要检查此时间戳并发出新请求。仅缓存的数据只是一些小的JSON对象,只有少数值保存UI所需的信息,并且没有大量的这些对象,如果它们都可以很容易地存储在内存中,我不会感到惊讶因此,时间戳是唯一必要的失效。
在缓存/ memcached / Redis方面,我的体验几乎为0。一个或那个有优势吗?这样的事情可能吗?我将如何实现这一目标?还有其他选择吗?
感谢帮助!
答案 0 :(得分:1)
服务器缓存这些RESTful查询响应是非常可能的并且很常见。
使用任何基于服务器的缓存,您也应该仔细考虑是否真的需要它,因为它add complexity。它肯定会有很大的改进,但由于你的使用量很低,实际上可能有点过分。您还可以使用HTTP缓存协议来避免在服务器上进行缓存。如果数据不经常更改并且您正确使用eTags或修改日期,以及AWS CloudFront等中间代理,则用户很少会遇到此延迟。
此外,如果您发现数据库是一个瓶颈,那么您可以通过将其配置为更积极地缓存来摆脱困境。
假设你确实要在内存中缓存......
对于服务器端缓存,通常的方法是将结果缓存一段时间或从缓存中手动清除它们。但是更现代和更好的方法imo是使用Russian-doll caching,您可以根据输入更改的时间来键入项目。然后您永远不必担心手动清除它们,您只需确保时间戳正确并同步。
Memcached与Redis相比还有什么?对于这种用法,Memcached可能是最好的,因为它非常简单,你不必担心持久性,这是Redis优于Memcached的一大优势。 Redis设计精良,也可以很好地工作,但如果你不需要它,那么我不会看到使用功能更丰富,更复杂的东西的好处。一个很好的选择。也就是说,Redis的一大优势是它现在具有出色的内置群集支持,因此易于扩展和保持在线状态。但这对你的用例来说太过分了。
还有别的吗?还有很多其他内存数据库,但我认为如果你想避免在没有太多支持的情况下依赖尖端框架的问题,Memcached和Redis可能是最好的。但是,是其他东西:无聊的旧文件。如果您要生成报告,则可能需要考虑将它们生成为临时文件。如果您的操作系统正在执行其工作,那么文件最终将被缓存。