Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET使用SqlCommand设置缓存依赖项_Asp.net_Caching_Sqlcachedependency_Cache Dependency - Fatal编程技术网

ASP.NET使用SqlCommand设置缓存依赖项

ASP.NET使用SqlCommand设置缓存依赖项,asp.net,caching,sqlcachedependency,cache-dependency,Asp.net,Caching,Sqlcachedependency,Cache Dependency,这是根据查询设置缓存项的有效方法吗 HttpRuntime.Cache.Insert( "ListLanguages", list, new SqlCacheDependency(command), DateTime.UtcNow.AddMinutes(AppConfiguration.CacheExpiration.MinimumActivity),

这是根据查询设置缓存项的有效方法吗

HttpRuntime.Cache.Insert(
                "ListLanguages",
                 list,
                 new SqlCacheDependency(command),
                 DateTime.UtcNow.AddMinutes(AppConfiguration.CacheExpiration.MinimumActivity),
                 Cache.NoSlidingExpiration);
命令是一个SqlCommand,以前初始化为:

SqlCommand command = new SqlCommand("Listlanguages", connection);
其中“ListLanguages”是一个存储过程,它只是一个选择

我发现这是一种比聚合缓存依赖项更简单、更能防止故障的方法(我的意思是防止故障,因为我不必自己聚合表!)


更有经验的程序员会怎么想?

我认为您不需要使用存储过程,命令可以直接基于其中包含的select语句

就我个人而言,我避免使用SqlCacheDependency,我总是担心查询中可能有一些代理系统无法处理的东西,我也不记得它们是什么。它在引擎盖下看起来也有点太复杂了,所以我担心它可能有脆弱的一面

编辑

在用户更新其配置文件的特定情况下,我将使用更新配置文件的代码删除缓存副本

在更一般的意义上,我会为接收最新信息建立一个可接受的延迟,并将绝对过期时间设置为该值

在昂贵的SQL查询的情况下,我会考虑在其他表中设置普通的摘要,并有代码更新这些数据(如SPS)来调整或删除已分级的数据。 我并不是说我永远不会使用SQLCacheDependence,但到目前为止,我还没有遇到过这样一种情况,即它是唯一明智的选择,尽管我确信它们确实存在。我猜在您无法完全控制所有可能修改数据库的代码的情况下,可能会出现这种情况

什么是“最新”呢?

在Web应用程序中,用户可能看到的最新信息是上次响应中提供的信息。这里有一些要考虑的事情。< /P>
  • 假设他们拿到了一些东西,但被一个电话打断了5分钟。他们是否意识到返回查看的数据已经5分钟了,现在可能已经过时
  • 用户在提交数据前几毫秒获取的数据会改变他们所看到的内容,这有多大问题
  • 有人正在输入一些新数据,但尚未提交,是否可以说数据库中当前的数据本身已过时
我要指出的一点是,无论我们在系统中投入了多少缓存技巧,都不可避免地会有延迟,我们接受这种延迟,而没有考虑它


考虑到这一点,在许多情况下,我们可能会觉得有义务提供最新的信息,但这种义务并不是真正必要的。这方面的一个很好的例子就是如此。我们在这里看到的许多查询结果实际上都是缓存的,并且可能会看到与我们所做的更改不完全一致的数据。然而,其他人不知道我们的变化,他们在我们做出改变的那一刻看到这些变化并不重要。

我们如何知道我们是否比你更有经验?;)嗯。。我明白了,但是你如何将数据保存在缓存中,并以足够的信心呈现数据,以确保呈现的数据得到更新?例如,如果一个用户更新了他的个人资料,我敢肯定他会感到困惑,因为他发现他的个人资料没有被修改:桑托尼,我对你做事的方式很好奇,也很好奇你的担忧和顾虑……我同意安东尼的观点。。。SqlCacheDependency很难使用。也很难知道它是否真的在进行缓存,因为很多实际的运行时行为很难预测。你能告诉我你是如何处理这个问题的吗?您是否使用了缓存的替代方案,或者根本不使用?非常感谢你的帮助!非常感谢。