Web API中的数据缓存

4
我正在开发一个web api项目,我的web api调用repository。Repository会调用第三方数据源执行CRUD操作。由于调用数据源代价高昂且每周都会更新,因此我考虑实现缓存。我看过一些输出缓存包,但它们无法满足我的需求,原因如下:
1. 如果我使用输出缓存Get方法,则无法在GetById方法中使用相同的Cache输出或将缓存数据用于其他操作,例如查找操作。我还必须在每次更新/发布时手动更新缓存。
2. 在这种情况下,我应该删除缓存还是在进行put或post操作时更新缓存?
我完全不知道如何满足这个要求,请建议我如何实现它。我在网上搜索过,但没有找到类似的东西。我是SO和WebAPI的新手,如果问题未达到标准,请谅解。

有一些不清楚的地方:如果数据源每周更新一次,为什么你在每个请求中都要调用以检索数据?或者你只是调用执行创建/删除操作? - Xavier Egea
1个回答

0
如果我输出缓存Get方法,我就不能在GetById方法中使用相同的缓存输出,也不能在其他操作(如查找操作)中使用相同的缓存数据。每当有更新/发布操作发生时,我还必须手动更新缓存。
要将缓存数据用于不同的操作,如GetById和Find,您需要将数据存储在不同的数据结构中。像REDIS这样的缓存支持对象的哈希映射,可以供GetById使用。具体使用哪种数据结构取决于您的情况。
关于第二个问题,我建议您在put或post操作发生时选择删除缓存或更新缓存。对于第一个问题的后半部分和这个问题,您需要在写回缓存和写透缓存之间进行选择。您可以在this article中了解更多关于写回缓存和写透缓存的信息。基本上有两种方法。
  1. 每个缓存条目都有一些TTL,之后您需要从“数据源”获取数据。优点是您的POST和PUT操作将更快,因为它不需要更新缓存,但缺点是数据可能会过时一段时间。
  2. 第二个选项是在发生POST或PUT操作时使缓存中的相应条目无效。
  3. 第三个选项是在POST和PUT时更新缓存条目。

就写入/更新延迟而言,选项1是最快的,但存在获取过时数据的风险。选项2将减慢GET、PUT/POST操作,而选项3将减慢写入操作。

您的选择应取决于系统中读取和写入操作的比例。如果您设计的系统以读取为主,则选项3比选项2更好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接