何时使缓存无效-.NET Core API

时间:2018-11-06 23:10:24

标签: asp.net-core .net-core asp.net-core-2.0 asp.net-core-webapi api-design

如果从外部源进行表更改,我如何知道何时使缓存无效?

我有一个api调用,它返回一个employee表。第一次进行此调用时,我将缓存结果,以便在随后的调用中将其从缓存而不是数据库中提取数据。但是,这很有道理,如果有人从api外部的到employee表中添加了一条新记录,缓存如何知道它现在无效了?

如果用户通过API 对employee表进行了更改,我可以捕获到该表,但是我们有一个单独的桌面应用程序不使用该API,该应用程序可以直接进行更改到员工表。是否有任何接受的处理标准?

我能想到的唯一可能的解决方案是向雇员表添加一个触发器,并以某种方式使用它来知道表何时发生了更改。但是,我们有超过一千个表,并且正在为每个表进行api调用-因此,我认为向数据库中添加一千个触发器不是可接受的解决方案。

3 个答案:

答案 0 :(得分:0)

是的,您可以按照建议添加触发器。或者,您可以使用支持到期时间/滑动到期时间的缓存系统。因此,您有时会提供过时的数据,但并非总是如此。

答案 1 :(得分:0)

作为其他答案,a暗示您的触发器想法是好的,但是正如您所言,这将是很多触发器。

如果您的缓存不是API的本地缓存,那么我认为如果触发器能够访问它不是该缓存。您不能从桌面应用程序访问它吗?当成功更改employee表时,可以使用桌面应用程序从缓存中删除员工记录,从而使缓存无效。

归结为..

您有一个缓存(本质上是一个读存储)。 您有两种选择来更新它 -要么超时然后获取(如果您不需要最新的实时数据,也可以) -或者被告知已经其数据不再有效。

答案 2 :(得分:0)

两种解决方法

  1. 推模型
  2. 拉模型

推送模型::使用SQL Server表的数据库触发器填充中间审核表,并使用后台任务对其进行轮询。

拉模型::使用CLR Trigger并将更新推送到API。每当DML发生时,CLR触发器都会调用Api,依次可以更新缓存!

希望这会有所帮助!

相关问题