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

标签 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 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/

相关文章:

javascript - Azure 上 JavaScript 文件的策略

c# - 我应该如何设置我的集成测试以将测试数据库与 Entity Framework 一起使用?

c# - 如何在 ASP.Net MVC 中将列表对象显示到 View ?

asp.net - 零停机 ASP.NET 部署和 session 状态问题

javascript - asp.net Jquery.ajax 保留 JSON.Parse 意外字符错误

sql - 如果一列为空,则在 SELECT 上选择不同的列

python - Postgresql 是否可以对二进制数据执行立方体功能?

postgresql - 如何在 Python 中使用 psql "\copy"?

c# - KeysCollection 中的键是什么?

c# - 后退按钮阻止页面授权用户?