我目前正在设计一个系统,我们需要知道用户是否仍然在线/登录。
该系统是基于 .Net 网络的,因此我们打算使用 AJAX/JSONP 代码来执行此操作,该代码每 2 分钟对服务器执行一次 ping 操作。
有大量用户,因此每 2 分钟执行一次 ping 会导致 ca。每秒 600 次 ping。
因此我们打算将此服务放在它自己的服务器上,并使用 Velocity 将所有信息存储在内存中。
缓存将是一系列命名值对,首先是组,然后是人,以及每个人的时间戳。
问题是我们可以为每个 ping 直接写入速度缓存吗?或者这会导致锁定?我们应该先写入队列,然后从队列更新缓存吗?
在我们更新缓存的同时,将有其他用户按组请求信息。
最佳答案
我认为,如果您可以更改您的模型以使每个缓存项都围绕一个用户而不是您提到的一组用户,那么您应该能够做到这一点。如果您需要按组查询这些项目的能力,则必须考虑一种方法来保留键和组的索引(可能在内存中)以查询项目(查询显然是一个慢点)。
这将使您在同一时间更新同一项目的可能性接近于零(因为每个客户端只会每 2 分钟更新一次)
这将允许您利用乐观并发模型来提高速度,正如在下面链接中的 MSDN 上所讨论的那样,而不会丢失任何数据。
关于c# - "I am alive"服务的设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4095369/