我正在构建ASP.Net MVC应用程序“kinda Game”,与在线用户交易很多。
我向每个"10s"
发送Ajax请求到某些Action
,以便在用户保持网站打开时保持用户在线。
对于此Action
- ((在静态列表和数据库中),此LastActivityDate
更新 User
。
所以问题是:
"10s"
继续管理此列表以启动离线用户。OnlineUsers
。
注意:我正在使用此SO Question中的技术来定期执行一些任务,例如重新管理OnlineUsers静态列表。
答案 0 :(得分:2)
首先,您不会使用List<User>
来代替Dictionary<int,User>
,而是使用用户的ID作为密钥,这样您就可以立即找到要更新的用户。其次,我认为这可能是两者的混合。保留当前用户的缓存副本,定期从数据库刷新,并将数据(如果需要,异步)保存到数据库。如果您发现在代码中的各个位置执行此类操作,您可能需要考虑封装此行为的用户的自定义持久性类。
答案 1 :(得分:2)
如果您打算拥有大量用户,并且需要经常从数据库中提取数据,那么最好在Cache
中存储用户列表。显然这将存储在服务器的内存中,因此您不希望存储大量对象,但如果它只是一个简单的在线用户列表,则不应该是一个问题。
答案 2 :(得分:1)
static的范围始终是在操作系统中运行的进程的范围。因此在桌面应用程序中使用静态是有意义的。但是,我发现对服务器端应用程序使用静态有点任意,因为您无法控制进程。这是执行此操作的Web服务器。如果流程意外结束怎么办?或者,如果有许多流程为您的应用程序提供服务呢?
因此,数据库的使用是不可避免的。您仍然可以将静态范围作为临时缓存,但不能依赖它。