gpt4 book ai didi

asp.net - 如何使带有 SqlDependency 的 OutputCache 依赖于每个请求的数据库中的一行?

转载 作者:行者123 更新时间:2023-12-03 22:18:41 25 4
gpt4 key购买 nike

我有个问题。找不到如何使 OutputCache SQLDependency 依赖于数据库表中的一行。
例如。
我有一个带有一个参数的 Controller 。

ActionResult Index(int? id)

对于具有相同 id 的每个请求,我需要检查数据库表 table1(id int, last_updated datetime)。如果 id = id 和 last_updated 的行没有改变。

我使用 sql server 2005 或更高版本。

我应该使用哪种策略?

我尝试使用:
[OutputCache(Duration = int.MaxValue, VaryByParam = "id", 
SqlDependency = "DatabaseName:table1")]

但它适用于整个表格的变化。

最佳答案

为了避免为每个网页请求访问数据库(通常是一项昂贵的操作),可以使用对象缓存(在 .NET 4.0 中引入)。这将导致网页的快速服务,因为一切都将直接从内存中处理。仅当数据实际发生更改,或者由于资源限制或您的 CacheItemPolicy 设置而将缓存从内存中逐出时,才会发生数据库操作。

在这种情况下使用的实际策略如下。

第1步。在修改/添加/删除“id”行数据的模型方法中,完成该数据库操作,然后:

  • 如果您的对象已存在于缓存中,则将其驱逐;
  • Create a new cache entry为对象。

  • 第2步。尽可能从缓存中检索对象,仅在必要时从数据库刷新:
  • 从您的 Controller 操作方法中,调用返回由“id”参数标识的对象的模型方法;
  • 在您的 Model 方法中,检查此 ID 的缓存。如果它为空,则从您的数据库中检索数据并像往常一样构建对象,然后将完整的对象存储在缓存中;
  • 从 Model 方法中,将缓存的内容(即此 id 的特定对象)返回给调用 Controller 操作方法,然后让操作方法像往常一样填充和提供 View 。

  • ( MemoryCache 类是 ObjectCache 类的具体实现)。

    使用这种方法,根本不需要使用 Controller 方法上的 OutputCache,并且数据缓存决策将全部封装在 Model 中。我们将获得更清晰的关注点分离;更高的效率、更短的响应时间和更高的可扩展性;减少对昂贵的数据库操作的依赖。

    关于asp.net - 如何使带有 SqlDependency 的 OutputCache 依赖于每个请求的数据库中的一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9587749/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com