2014-11-25 172 views
4

我正在研究web api项目,我的web api正在调用repository.Repository调用第三方数据源来执行CRUD。调用data source代价非常高,并且每周更新一次。Web API中的数据缓存

所以我想实现缓存。我见过几个输出缓存包,但它不符合我的要求,这是因为:

  1. 如果我输出缓存GET方法,我不能够使用相同的缓存输出GetById方法或一些相同的缓存数据其他操作如查找运营。在发生任何更新/发布时,我还必须手动更新缓存。
  2. 还有一件事我很困惑该怎么办在这种情况下是否删除缓存或更新 缓存每当放置或后操作发生?

我完全糊涂完成这个要求。请告诉我如何满足这个要求。我在网上搜索,但还没有找到类似的东西。

我是新手,无论在SO和的WebAPI所以原谅我,如果问题不能满足标准

+0

有一些东西不清楚:如果数据源每周更新一次,为什么要调用每个请求来检索数据?或者你只是打电话来执行创建/删除/删除操作? – 2014-11-25 12:49:19

回答

0

如果我输出缓存GET方法,我不能够使用相同的缓存输出 在GetById方法或相同针对其他操作缓存数据 ,比如find opeartion。我还必须在有任何更新/帖子发生时手动更新缓存 。

要将缓存的数据用于不同的操作,如GetById和Find,您需要将数据存储在不同的数据结构中。像REDIS这样的缓存支持可由GetById使用的对象的散列表。这完全取决于你的情况需要使用什么样的DS。

还有一两件事我很困惑,在这种情况下是否 删除缓存或更新缓存,每当放或操作后会发生什么呢?

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

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

在写入/更新延迟方面,选项1是最快的,但有可能导致陈旧的数据。选项2将减慢GET,PUT/POST操作,选项3将减慢写入操作。

您的选择应该取决于系统中读写操作的比率。如果您正在设计的系统读取较重,则选项3优于2。