我正在尝试通过使用 SQLCacheDependency 类来缓存具有多个结果集的 SQL 存储过程。存储过程中的前三个查询是网站上所有用户通用的查询,第四个检索按用户名过滤的数据。
由于存储过程中的第四个查询是通过用户名过滤的,这是否意味着SQLCacheDependency类会在每次另一个用户执行它时从Cache中删除所有结果集,还是意味着它会命中数据库获取存储过程中第四个查询的结果,并从缓存中检索前三个查询的结果?
提前致谢
我正在尝试通过使用 SQLCacheDependency 类来缓存具有多个结果集的 SQL 存储过程。存储过程中的前三个查询是网站上所有用户通用的查询,第四个检索按用户名过滤的数据。
由于存储过程中的第四个查询是通过用户名过滤的,这是否意味着SQLCacheDependency类会在每次另一个用户执行它时从Cache中删除所有结果集,还是意味着它会命中数据库获取存储过程中第四个查询的结果,并从缓存中检索前三个查询的结果?
提前致谢
由于应用程序缓存是全局的(即所有用户使用相同的缓存),可能会发生的情况是第一个用户的结果将被缓存并为所有后续用户提供服务。显然不是你想要的结果。从SQLCacheDependency 文档:
SqlCacheDependency 类监视特定的 SQL Server 数据库表。当表发生变化时,与表关联的项目会从缓存中删除,新版本的项目会添加到缓存中。
您可能应该将所有 3 个第一个查询分开,独立缓存它们,而不是缓存第 4 个。缓存实际上是为了在许多用户之间分摊昂贵操作(在本例中为 SQL 查询)的成本。如果你想存储用户特定的东西,那就是Session、Cookies和ViewState的用途。