请求和显示的最佳方式"您有x条新消息"?

时间:2015-07-02 09:39:45

标签: asp.net-mvc optimization

我的ASP.NET MVC网站上有成员的消息传递系统。 邮件被标记为已读或未读。

现在我想在导航栏中显示一个标签,上面写着"你有x个新消息"如果有的话。这,无论我在网站上的哪个位置(不仅在讨论页面上)。

我可以请求在网站的每个页面上检索未读邮件的数量,但这对我来说似乎很糟糕。

您还推荐其他什么方式? (缓存,cookie等) 我认为这是一个众所周知的场景。

3 个答案:

答案 0 :(得分:0)

您可以尝试其他方法:首次存储未读消息的数量。使用SignalR之类的东西来通知并在用户收到新消息时更改号码

答案 1 :(得分:0)

如果您有兴趣实时处理此问题,请考虑SignalR技术:http://signalr.net/

如果没有,你可以考虑使用MessagesCount属性的BaseController和BaseViewModel。

答案 2 :(得分:0)

假设您有一张Messages的表格:

Id             INT
Created        DATETIME
ReceiverUserId INT
Message        NVARCHAR(MAX)
...

如果您想从某个日期/时间(称为LastVisited)获取新消息的数量,您可以使用SQL查询:

SELECT COUNT(*)
  FROM Messages
 WHERE ReceiverUserId = @CurrentUserId
   AND Created > @LastVisited

这个查询速度快吗?是的,如果您创建了索引(ReceiverUserId, Created)。 但是这个值不经常更改,因此您可以使用缓存。

如果您使用IoC容器,例如Autofac,Castle Windsor等,您可以为每个登录用户创建不同的容器,并将用户特定的对象(值)存储在此容器中。

您还可以在Session中存储此原始值(新消息的数量)。