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