0

画面上部の通知バーを介してアカウントへの特定の変更をユーザーに通知する Web サイトを構築しています (SO が新しいバッジを通知する方法と同様)。

私のDBには、イベントを一覧表示するテーブルと、変更がまだ通知されているかどうかを示すフラグがあります。テーブルの形式は次のとおりです。

UserID     AccountEvent      EventDescription                  HasBeenNotified
ABC123     1                 Your price deal ends in 2 weeks   FALSE

私が達成したいことは次のとおりです。

  1. 顧客がログインすると、通知が表示されます (発生する必要があると仮定します)。
  2. 顧客がクリックしてメッセージを確認
  3. DBHasBeenNotifiedフィールドに設定TRUE(通知が発生したことを確認するため)

私はこれをすべて達成することができましたが、問題があります。

通知する必要があるイベントをHttpRuntime.Cache10 分の有効期限で入れているので、DB をポーリングし続ける必要はありません。

これにより発生する問題は、キャッシュの有効期限が切れるまで、顧客が同じメッセージの複数の通知を表示する可能性があることです。次に例を示します。

  1. 顧客がログインし、アプリ ロジックがキャッシュを調べて、顧客ABC123に X を通知する必要があると言う
  2. その後、顧客はメッセージを確認します (DB を更新して通知フラグを TRUE に設定します)。
  3. キャッシュは更新された DB をまだ反映していないため、顧客が新しいページに移動すると、同じ通知メッセージが発生します (キャッシュが期限切れになるまで)

私の知る限り、キャッシュ内の実際のデータを更新することはできません (Removeキャッシュ キーに基づいてキャッシュからのデータのみを更新できます)。

複数の通知の問題を回避する方法のヒントやヒントを提供できる人はいますか?

4

1 に答える 1

0

Why not burst the cache? Remove that key from the cache?

Or you can update the cache by setting it again to new HasBeenNotified value or even set it to null which you should deal with and accept as empty.

HttpRuntime.Cache["YourKey"] = "";//new object/value;
于 2012-10-26T09:08:03.457 に答える