ASP.NET / MIMO 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缓存。
答案 0 :(得分:2)
最好的方法是使用LISTEN
and NOTIFY
。
让您的应用维护后台工作人员与数据库的持久连接。在该连接中,发出LISTEN name_changed
,然后等待通知。如果npgsql支持它,它可能会提供回调;否则你将不得不进行民意调查。
向发出name
。{/ p>的NOTIFY name_changed
表添加触发器
当你的后台工作人员收到通知时,它可以刷新缓存。
您甚至可以使用NOTIFY
有效内容有选择地仅使更改的条目无效。