将SQL表与Azure Redis缓存同步

时间:2019-06-12 06:21:13

标签: sql-server azure redis stackexchange.redis

我刚开始使用Redis Cache,并更清楚其概念和功能。

我的目的是缓存一些SQL Server数据库表。很少有C#应用程序会频繁更新那些表,很少有人正在读取这些表。我不是要服务于数据库中的每个请求,而是要服务于缓存中的请求(从缓存中读取数据,CRUD仅直接在数据库中发生)。为了支持这种情况,一种方法是

  1. 使用Redis缓存缓存所有表。
  2. 服务应用程序从该缓存获取请求。
  3. 当任何应用程序更新任何表时,请更新 相应地进行缓存,并提供从缓存到读取器的新副本。

上述方法非常简单,几乎没有挑战(我可以解决)。

根据我的经验,必须具有某种机制来自动同步具有Redis缓存的数据库表,因此我不必从其他应用程序更新缓存。

对此有任何投入吗?

1 个答案:

答案 0 :(得分:0)

应通过将数据放入MQ并使用使用者更新Redis来同步实际的数据存储和缓存。

在将数据添加到最终存储(即SQL数据库)时,需要将该数据排队到某些服务总线或消息队列中,并让某些异步服务使用某种后台进程来进行整个同步。

您不想进入这种情况(当不使用服务总线和异步服务时):

  • 使请求或流程变慢,因为用户需要等待 直到数据都存储在数据库和缓存中为止。
  • 在缓存过程中有失败的风险,并且无法 具有重试策略(通常是 服务总线或某些消息队列。

此外,此失败可能导致缓存部分或全部损坏,您将无法自动轻松地安排一些任务来解决此问题。

关于使用Redis密钥有效期,这是一个好主意。由于Redis可以使用其内置机制来使密钥失效,因此您不应在整个后台进程中实现密钥失效。如果存在密钥是因为它仍然有效。

顺便说一句,您不会总是遇到这种情况(如果密钥没有过期,则意味着它不应被覆盖)。它可能取决于您的实际域。

希望这会有所帮助。