我正在构建一个网站,该网站将通过屏幕顶部的通知栏通知用户对其帐户的某些更改(类似于 SO 通知新徽章的方式)。
在我的数据库中,我有一个列出事件的表,还有一个标志来表示它们是否已被通知更改。该表的形式为:
UserID AccountEvent EventDescription HasBeenNotified
ABC123 1 Your price deal ends in 2 weeks FALSE
我想要实现的是:
- 客户登录并显示通知(假设需要发生)
- 客户点击确认消息
- DB
HasBeenNotified
字段设置为TRUE
(确认已发生通知)
我已经能够实现这一切,但有一个障碍!
我将需要通知的事件放入HttpRuntime.Cache
10 分钟到期,因此我不需要继续轮询数据库。
这给我带来的问题是,在缓存过期之前,客户可能会看到同一消息的多个通知,例如:
- 客户登录并且应用程序逻辑在缓存中查找并说客户
ABC123
需要收到 X 通知 - 然后客户确认消息(更新 DB 以将通知标志设置为 TRUE)
- 缓存尚未反映更新的数据库,因此如果客户导航到新页面,则会触发相同的通知消息(直到缓存过期)
据我所知,我无法更新缓存中的实际数据(只能Remove
基于缓存键从缓存中获取数据)。
任何人都可以提供有关如何解决多个通知问题的提示和技巧吗?