如果PostgreSql数据库中的数据发生更改,如何使ASP.NET缓存无效
ASP.NET/MONO MVC2应用程序标准ASP.NET Web缓存用于加速数据库访问:如果PostgreSql数据库中的数据发生更改,如何使ASP.NET缓存无效,asp.net,asp.net-mvc,postgresql,caching,mono,Asp.net,Asp.net Mvc,Postgresql,Caching,Mono,ASP.NET/MONO MVC2应用程序标准ASP.NET Web缓存用于加速数据库访问: string GetName() { // todo: dedect if data has changed and invalidate cache var name = (string)HttpContext.Current.Cache["Name"]; if (name!=null) return name; name = db.Query("SELECT name fro
string GetName() {
// todo: dedect if data has changed and invalidate cache
var name = (string)HttpContext.Current.Cache["Name"];
if (name!=null)
return name;
name = db.Query("SELECT name from mydata");
HttpContext.Current.Cache.Insert("Name", name);
return name;
}
mydata可以由其他应用程序更改。
在这种情况下,此方法返回错误的数据。
在这种情况下,如何检测数据是否已更改并从PostgreSql数据库返回新数据
如果mydata已更改,则可以清除整个Web缓存。最好的方法可能是使用 让你的应用程序维护一个与数据库保持持久连接的后台工作程序。在这方面,发出一个
侦听名称\u changed
,然后等待通知。如果npgsql支持它,它可能会提供回调;否则你就得投票了
将触发器添加到name
表中,该表发出NOTIFY name\u changed
当后台工作程序收到通知时,它可以刷新缓存
您甚至可以使用
NOTIFY
有效负载有选择地仅使更改的条目无效。谢谢。看起来要做很多工作。是否有一个现成的PostgreSql解决方案,比如针对MS SQL server的SqlCacheDependency?@Andrus我对此表示怀疑,但我不使用.NET,所以我无法确定。由于显而易见的原因,.NET+MSSQLServer通常会有更多的罐装内容。像上面这样的方法应该很容易实现;我已经为Java编写了类似的代码,它只需要一个简单的触发器和几个小的ish类。@Andrus请参阅本教程的“处理通知”部分。您可能希望使用“同步通知”模式来避免轮询。从npgsql.ASP.NET来看,它非常简单。缓存是应用程序的本地缓存。若请求完成,线程可能会终止。在这种情况下如何实现后台工作程序?。我把有关这件事的问题贴在了网上