2012-10-26 47 views
0

我正在構建一個網站,通過屏幕頂部的通知欄向用戶通知其帳戶的某些更改(類似於SO通知新的方式徽章)。網站上的通知欄 - 如何避免同一用戶的多個通知

在我的數據庫中,我有一個列出事件的表格,還有一個標誌來表示它們是否已被通知變化。該表的形式爲:

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

我想實現的是:

  1. 在客戶記錄和顯示通知(假設需要 發生)
  2. 客戶點擊確認消息
  3. DB HasBeenNotified字段設置爲TRUE(確認通知已發生)

我已經能夠實現所有這些,但有一個障礙!

我正在將需要通知的事件放入HttpRuntime.Cache並保留10分鐘,因此我不需要繼續輪詢數據庫。

這爲我的問題是,一個客戶可能看到同一消息的多個通知,直到緩存過期,例如:

  1. 客戶登錄並應用邏輯會在緩存中,並表示客戶ABC123必須 通知X的
  2. 客戶再確認消息(更新DB設置通知標誌設置爲TRUE)
  3. 緩存尚未反映更新的數據庫,所以如果用戶導航到新的頁面相同的通知消息被觸發(直到緩存過期)

據我所知,我無法更新緩存內的實際數據(只能根據緩存密鑰從緩存中獲取Remove數據)。

任何人都可以提供如何解決多個通知問題的提示和技巧嗎?

回答

0

爲什麼不破解緩存?從緩存中刪除該密鑰?

或者你可以更新緩存再次將其設定爲新的HasBeenNotified價值,甚至將其設置爲空,你應該處理,並接受爲空。

HttpRuntime.Cache["YourKey"] = "";//new object/value; 
+0

在緩存中的數據是*所有*的客戶,因此刪除緩存的關鍵手段,我會一直走下去的DB刷新它即原因,我希望它在緩存中,這樣我不需要去每個用戶登錄的數據庫檢查他們是否需要收到消息。那有意義嗎? –

+0

對緩存這一點很有意義,但爲什麼不爲每個用戶製作一個密鑰,並將它們的ID用作密鑰的一部分。你有多少用戶? – dove

+0

我曾考慮過這個問題,因爲它解決了這個問題。我很天真*當它來緩存但我可能有多達5萬+的客戶,我想知道是否有50K +鍵會妨礙性能(不是一個緩存只是一個字典與鍵值對???) –