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

时间:2012-10-12 20:06:33

标签: asp.net asp.net-mvc postgresql caching mono

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缓存。

1 个答案:

答案 0 :(得分:2)

最好的方法是使用LISTEN and NOTIFY

让您的应用维护后台工作人员与数据库的持久连接。在该连接中,发出LISTEN name_changed,然后等待通知。如果npgsql支持它,它可能会提供回调;否则你将不得不进行民意调查。

向发出name。{/ p>的NOTIFY name_changed表添加触发器

当你的后台工作人员收到通知时,它可以刷新缓存。

您甚至可以使用NOTIFY有效内容有选择地仅使更改的条目无效。