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 缓存。
最佳答案
最好的方法可能是 LISTEN
and NOTIFY
.
让您的应用程序维护一个与数据库保持持久连接的后台工作人员。在这种情况下,发出LISTEN name_changed
,然后等待通知。如果 npgsql 支持它,它可能会提供回调;否则你将不得不进行民意调查。
向 name
表添加一个触发器,以发出 NOTIFY name_changed
。
当您的后台工作人员收到通知时,它可以刷新缓存。
您甚至可以使用 NOTIFY
有效负载选择性地仅使更改的条目无效。
关于asp.net - 如果 PostgreSql 数据库中的数据发生更改,如何使 ASP.NET 缓存失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12866333/