5

我目前正在设计一个系统,我们需要知道用户是否仍然在线/登录。

该系统是基于 .Net 网络的,因此我们打算使用 AJAX/JSONP 代码执行此操作,该代码每 2 分钟 ping 服务器一次。

有大量用户,因此每 2 分钟 ping 一次会导致 ca. 每秒 600 次 ping。

因此,我们打算将此服务放在它自己的服务器上,并使用 Velocity 将所有信息存储在内存中。

缓存将是一系列命名值对,先是组,然后是人,以及每个人的时间戳。

问题是我们可以为每个 ping 直接写入速度缓存吗?或者这会导致锁定?我们是否应该先写入队列,然后从队列中更新缓存?

在我们更新缓存的同时,将有其他用户基于每个组请求信息。

4

1 回答 1

2

我认为如果您可以更改模型以将每个缓存项基于用户而不是您提到的一组用户,我认为您应该能够做到这一点。如果您需要按组查询这些项目的能力,则必须考虑一种方法来保留键和组的索引(可能在内存中)以查询项目(查询显然会很慢)。

这将使您几乎为零同时更新同一项目的可能性(因为每个客户端只会每 2 分钟更新一次)

这将允许您利用 MSDN 上在下面链接中讨论的速度的乐观并发模型,而不会丢失任何数据。

http://msdn.microsoft.com/en-us/library/ee790890.aspx

于 2010-11-05T03:40:00.833 回答