问题标签 [sqlcachedependency]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net - 缓存失效通知SqlCacheDependency
我正在尝试为我的 ASP.NET 应用程序(ASP.NET 3.5、SQL 2008)中的一些参考数据创建 SQL 缓存依赖项。我使用 aspnet_regiis 实用程序为我的数据库和几个表启用了 sql 缓存。我已经在 web.config 中创建了所需的 sqlcachedependency 条目。我在 application_start 事件中添加了以下代码
日期时间 dt = 日期时间。现在;
我在回调函数 RefreshProducts 中从数据库重新加载数据。
由于某种原因,当我更改表中的数据时,我无法调用回调函数。我没有收到任何运行时错误,我可以从 AspNet_SqlCacheQueryRegisteredTablesStoredProcedure 看到该表已启用缓存。我通过将 sqldependency 替换为文件依赖项来测试其余代码。当我更改文件时,回调函数被立即调用,所以我的错误很可能是设置了 sqlcachedependency。
谢谢
asp.net-mvc - SQLServer OutputCache 对象已删除或未创建
在这个项目中,我使用的是 MVC-3,带有输出缓存属性和 web.config 中的适当引用,希望还有 global.asax(如下)。我正在从共享主机运行生产,并且无法以管理员身份运行 aspnet_regsql 来创建适当的对象,因此我从我的开发框中复制了 AspNet_SqlCacheTablesForChangeNotification 表、SP 和触发器来设置数据库。
一般来说,一切都很好,但是我发现大约每 2 或 3 天一次,所有缓存数据库对象都会被删除,并且不会在应用程序启动时重新创建。(没有托管 co 脚本正在删除它们)。
为了让站点再次运行,我最终手动复制数据库对象备份。
我怎样才能不删除对象,或者自动创建它们?
我的应用程序在 global.asax 中开始看起来像这样:
我的应用端看起来像这样:
web.config 条目如下所示:
asp.net-mvc-3 - 从其他应用程序中删除 HttpRuntime.Cache 项
我有一个管理应用程序,我在其中操作数据库中的对象,以及一个主要用于查看这些对象的公共 asp.net mvc 应用程序。
我已经为一些使用 HttpRuntime.Cache 的对象实现了一个简单的缓存。
我想从管理应用程序中使公共应用程序的部分缓存无效。
最简单的解决方案是创建一个 ClearCache() 操作,该操作在调用时清除缓存中的每条记录。
但是使用使用缓存依赖项的缓存不是更好吗?我不知道哪个最好用以及如何使用。我正在考虑一个 sql 依赖项,但是由于我正在缓存以跳过 sql 查询,所以我不确定这会很快。
检查 sql 缓存依赖关系慢吗?我希望在很多情况下使用缓存的对象,每次检查 sql 依赖项听起来都不好。
.net - 关于SqlDependency/SqlCacheDependency的几个问题
我有几个问题想澄清
您可以使用 SqlDependency 或 SqlCacheDependency 来找出数据库中哪个特定数据项发生了变化吗?
现在,我通过一个后台线程定期检查缓存的值来使用 SqlCacheDependency。如果缓存为空,则从数据库中读取数据并将其插入缓存。有没有比使用后台线程定期轮询缓存更好的方法呢?
如果我理解正确,SqlDependency 的工作原理是依赖于命令。一旦发生通知,就会触发 onchangeevent 。在事件处理程序中,您取消注册依赖项并创建一个新的依赖项。这个 Onchangeevent 处理程序还有其他用途吗?例如,我可以找出哪个项目发生了变化,将新数据从这里推送给客户等吗?
使用 SqlCacheDependency,我相信我必须定期轮询缓存。使用 sqlDependency,我根本不需要轮询。这是真的 ?
提前致谢
sql-server-2008 - NHibernate + SysCache2 + SqlCacheDependency - 缓存在应用程序中没有失效
我有一个基本的 MVC 应用程序,它使用 NHibernate 进行 OR/M 和数据访问,SysCache2 用于 NHibernate 中的二级缓存,SqlCacheDependency 用于底层缓存失效逻辑。我相信我已经正确设置了所有内容(如果需要,我可以添加详细信息)并且我可以看到项目正在缓存在应用程序端。
但是,如果我直接更新数据库表中的项目,则不会通过 SqlCacheDependency 和 NHibernate 中的 SysCache2 将更新发送回应用程序。因此,数据库中的数据正在更新,并且与应用程序缓存中的数据不同(在 NHibernate 和 SysCache2 中)。
我可以在 [AspNet_SqlCacheTablesForChangeNotification] 表中看到与正确域表递增相关的 [changeId] 列的值,因此我相当确定 SQL 服务代理已正确设置和配置。如果我使用 SQL Profiler 分析数据库,我可以看到队列、服务和存储过程的设置调用以及用于监视的 BEGIN CONVERSATION 调用。
不太确定接下来要检查什么。以前有没有人遇到过这个问题,解决方案是什么?
.net - 当表中的数据发生变化时,SqlCacheDependency 如何知道何时与任何侦听器进行通信?
我一直在做一些研究,我可以看到这个系统的大部分管道但是我不确定当表中的数据发生变化时,sql server 如何知道何时将消息发送回任何侦听器(应用程序)。我将首先解释我所理解的内容,直到我迷路为止。
1)需要在数据库上启用Service Broker,并且需要设置一些权限。
2)应该部署数据库模式。
3) 使用 aspnet_regsql.exe,为需要缓存数据的数据库和表启用 sql 缓存依赖项(此步骤创建一个表来跟踪更改并在表上触发以捕获更改并增加该表中的值)。
4)在.net应用中设置sql缓存依赖。例如,在 Web 应用程序中,您需要为轮询时间、连接字符串等添加配置值;在 global.asax.cs 中启动/停止依赖项,然后在将项目添加到缓存时添加 sql 缓存依赖项。
4a) 启动依赖项时发生的部分情况是,为队列、服务和存储过程设置了基础设施,以便之后进行通信和清理。使用 Sql Query Profiler,您可以看到正在建立连接并在服务上设置通信通道,以便应用程序接收来自 sql server 的消息。
5)这是我感到困惑的地方。此时,我已经在我的应用程序缓存中缓存了一个项目,其中引用了对基础表的 sql 缓存依赖项,以便我的应用程序可以在该行发生更改时接收更改。如果我在该行上手动运行更新,我可以看到触发器被命中,并且跟踪表中的值增加了 1。但是,我没有看到任何返回到应用程序的通信,在 sql 查询分析器上没有任何内容,也没有是从缓存中删除的项目。我也看不到数据库队列中的任何内容(动态应用程序队列和标准错误/传输队列都没有)
我的问题是,什么在监视数据库中的跟踪表,以便可以将消息发送回关注此数据更改的 sql 依赖项?
非常感谢任何帮助...我一直在搜索许多在线参考资料,但找不到任何具体的解释。
c# - SqlCacheDependency & 自定义表更改
当我们测量通过他们的 API 和他们的数据库发出请求时,我们正在使用第三方,他们自己的缓存实现的性能非常差。他们的数据库(Sql Sever 2005 - 在兼容模式下运行 - 所以认为它实际上是 2000 db)使用与 SqlCacheDependency 相同的原则,因为它有一个包含两列的表
- 表名
- 变化计数
以及更新此自定义表的表上的触发器,该表记录更改计数。
我们正在考虑放弃第三方缓存并实施我们自己的解决方案。在 Asp.NET 3.5 中使用 SqlCacheDependency
我宁愿使用已经存在的数据结构,而不是通过启用表等的过程来创建自动 AspNet_SqlCacheTablesForChangeNotification 以及所有关联的 sp、触发器等。
所以我的问题是,是否可以设置 SqlCacheDependency 以便查看已在数据库中定义的自定义表,而不是查看 AspNet_SqlCacheTablesForChangeNotification 和相关的存储过程?
asp.net - 我可以为更改通知重置缓存表中的 ChangeId
如果我重置表中的 changeId 值会发生什么
其中一行目前已达到 2.x 十亿的最大值,我们的更新失败了。我尝试将类型更改为 BigInt,但读取它的应用程序失败。我需要将这些重置为 0。可以吗?会不会有问题?
asp.net - SqlCacheDependency 导致 SQL Server 的 CPU 使用率过高
我们遇到了一个问题,我们的 sql server 的 cpu 使用率跳到并保持在 100%,直到站点被关闭并重新启动。我们已经检查了代码并优化了所有可以做的事情,而且这种情况仍在发生。
我们对缓存所做的是运行一个查询,该查询从 sql server 加载整个结构(约 6000 行),将其存储在缓存中,并查询该缓存以执行我们需要在整个应用程序的其余部分执行的各种操作(有需要对数据执行大量递归操作,否则将对 sql server 造成巨大打击)。
我描述上面是因为似乎在使用sql缓存依赖时,我们遇到了sql server上的cpu尖峰。如果它被禁用,即使我们仍在缓存相同数量的数据,我们也不会再遇到峰值(在 sql 服务器或 Web 服务器上)。
有谁知道sql缓存依赖会导致这样的行为吗?使用的 sql server 是 SQL Server 2008 R2。Web 服务器是 IIS 7.5,我们使用 ASP.NET 3.5。此 Web 服务器设置为集群 (x2),它们都指向同一个 sql 服务器。
这是加载/设置缓存的代码:
c# - SqlDependency.Start 尝试为文件附加自动命名数据库失败
我在我的 App_Data 文件夹中获得了 NORTHWND.mdf 和 NORTHWND.LOG 的副本
我的连接字符串:
当我尝试打开和关闭连接时,一切正常。
现在,在此代码旁边,我想在放置代码时将 SqlCacheDependency 添加到页面: 在 msdn 中显示
我收到以下错误:
尝试为文件 C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\NORTHWND.mdf 附加自动命名数据库失败。存在同名数据库,或无法打开指定文件,或位于 UNC 共享上。
任何想法为什么会发生这种情况,我需要配置什么才能使 SqlCacheDependency 工作。
提前感谢伊兰。
另外我想补充一点,如果我将连接字符串更改为特定的
一切正常,但这似乎是错误的,因为我不希望用户将连接字符串更改为他们的路径,这就是为什么我想把它放在 App_Data 或列表中给 .\SQLEXPRESS 的相对路径,这也没有'工作:
请对此问题有所了解,必须有一些配置可以使这成为可能。提前致谢。伊兰