Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.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
如果PostgreSql数据库中的数据发生更改,如何使ASP.NET缓存无效_Asp.net_Asp.net Mvc_Postgresql_Caching_Mono - Fatal编程技术网

如果PostgreSql数据库中的数据发生更改,如何使ASP.NET缓存无效

如果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

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 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来看,它非常简单。缓存是应用程序的本地缓存。若请求完成,线程可能会终止。在这种情况下如何实现后台工作程序?。我把有关这件事的问题贴在了网上