0

我正在构建一个网站,该网站将通过屏幕顶部的通知栏通知用户对其帐户的某些更改(类似于 SO 通知新徽章的方式)。

在我的数据库中,我有一个列出事件的表,还有一个标志来表示它们是否已被通知更改。该表的形式为:

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

我想要实现的是:

  1. 客户登录并显示通知(假设需要发生)
  2. 客户点击确认消息
  3. DBHasBeenNotified字段设置为TRUE(确认已发生通知)

我已经能够实现这一切,但有一个障碍!

我将需要通知的事件放入HttpRuntime.Cache10 分钟到期,因此我不需要继续轮询数据库。

这给我带来的问题是,在缓存过期之前,客户可能会看到同一消息的多个通知,例如:

  1. 客户登录并且应用程序逻辑在缓存中查找并说客户ABC123需要收到 X 通知
  2. 然后客户确认消息(更新 DB 以将通知标志设置为 TRUE)
  3. 缓存尚未反映更新的数据库,因此如果客户导航到新页面,则会触发相同的通知消息(直到缓存过期)

据我所知,我无法更新缓存中的实际数据(只能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 回答