2

ASP.NET/MONOMVC2アプリケーション標準のASP.NETWebキャッシュは、データベースアクセスを高速化するために使用されます。

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

これを行う最善の方法は、 と を使用することLISTENですNOTIFY

DB への永続的な接続を使用して、アプリでバックグラウンド ワーカーを維持します。その接続では、 を発行しLISTEN name_changed、通知を待ちます。npgsql がそれをサポートしている場合、コールバックを提供する可能性があります。それ以外の場合は、ポーリングする必要があります。

nameを発行するテーブルにトリガーを追加しますNOTIFY name_changed

バックグラウンド ワーカーが通知を受け取ると、キャッシュをフラッシュできます。

NOTIFYペイロードを使用して、変更されたエントリのみを選択的に無効にすることもできます。

于 2012-10-13T01:17:11.060 に答える