Web API 中的数据缓存

本文关键字:数据 缓存 API Web | 更新日期: 2023-09-27 18:31:46

我正在做web api项目,我的web api正在调用存储库。存储库调用第三方数据源来执行 CRUD。拨打data source非常昂贵,并且每周更新一次。

所以我想实现缓存。我见过很少的输出缓存包,但它不能满足我的要求,因为:

  1. 如果我输出缓存 Get 方法,我无法GetById方法中使用相同的缓存输出或相同的缓存数据进行其他操作,例如查找操作。我还必须在发生任何更新/发布时手动更新缓存。
  2. 还有一件事我很困惑在这种情况下该怎么做,无论是删除缓存还是更新每当放置或发布操作发生时缓存?

我完全困惑于完成此要求。请告诉我如何满足此要求。我在网上搜索过,但没有找到类似的东西。

我是SO和WebAPI的新手,所以如果问题不符合标准,请原谅我

Web API 中的数据缓存

如果我输出缓存

获取方法,我不能使用相同的缓存输出 在 GetById 方法或用于其他操作的相同缓存数据中 就像找到操作一样。我还必须在任何时候手动更新缓存 任何更新/发布都会发生。

要将缓存的数据用于不同的操作(如 GetById 和 Find),您需要将数据存储在不同的数据结构中。像REDIS这样的缓存支持GetById可以使用的对象哈希映射。这完全取决于您的情况,您需要使用哪种 DS。

还有一件事我很困惑在这种情况下该怎么办 每当发生放置或发布操作时删除缓存或更新缓存?

为了回答你第一个问题的第二部分和这个问题,我想说你需要在写回和通过缓存写之间进行选择。您可以在本文中阅读有关 WB 和 WT 缓存的更多信息。基本上有两种方法

  1. 每个缓存条目都有一些TTL,然后从"数据源"获取数据。优点是您的 POST 和 PUT 操作会更快,因为它不需要更新缓存,但缺点是数据可能会过时一段时间。
  2. 第二个选项是在发生 POST 或 PUT 操作时使缓存中的相应条目失效。
  3. 第三个选项是在 POST 和 PUT 时更新缓存条目。

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

您的选择应取决于系统中读取和写入操作的比率。如果您正在设计的系统读取量很大,则选项 3 优于 2。