2

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

4

1 回答 1

2

最好的方法可能是使用LISTENandNOTIFY

让您的应用程序维护一个后台工作人员,并与数据库保持持久连接。在这方面,发出 a LISTEN name_changed,然后等待通知。如果 npgsql 支持它,它可能会提供回调;否则你将不得不投票。

将触发器添加到name发出NOTIFY name_changed.

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

您甚至可以使用NOTIFY有效负载选择性地使更改的条目无效。

于 2012-10-13T01:17:11.060 回答