【发布时间】:2012-11-29 16:36:01
【问题描述】:
我正在开发一个网站,其中 WCF 网络服务将使用 NHibernate 作为数据库 ORM,每个用户会话都有自己的 NHibernate 会话,该会话将在会话级别保持打开状态,为他们提供会话数据库缓存。
每个用户都有一个摘要对象,其中包含来自其他用户的通知列表,例如新消息、新喜欢等,类似于 facebook 如何在顶部定期更新以显示来自其他用户的新喜欢的通知,cmets等带有小红旗图标。
摘要对象在加载后显然将保存在 NHibernate 缓存级别,并且通过 AJAX 调用检查对象是否已更改并在收到任何新通知时更新视觉标志将是一件简单的事情。
问题在于,对此进行的任何更改(例如向用户发送新消息)都将在不同的 NHibernate 会话中进行(因为每个用户都有自己的会话并且您不会向自己发送消息!)所以如何用户 Y 可以在会话 Y 中向用户 X 发送消息并更新用户 X 的摘要以显示 1 条新消息吗?
是唯一的方法是强制代码每次都去数据库获取摘要详细信息,并且根本不为摘要对象使用缓存吗?即使有一种方法可以更新另一个会话,我也看不到任何方法你会知道如何找到正确的会话,所以我猜唯一的方法是更新数据库摘要表和检查更新的轮询线程到活动每次去数据库并忽略缓存。
有什么想法吗?
【问题讨论】:
标签: c# nhibernate caching