我是网络开发的新手,来自java和android的世界我有几个问题。 (我使用的是asp.net)。
Counter_ID
Increment_Value
每个计数器在一段时间内处于活动状态,并且只有一个计数器实例可以在一个时间点处于活动状态。在此之后,计数器重置为0并创建计数器的新实例。我将所有活动的实例以及过去的实例存储在具有此模式的表中。
Instance_ID
Counter_ID
Counter_Value
Status(Active/Complete)
Time_Remaining
当用户打开专用于两种计数器类型之一的页面时,需要加载有关该计数器当前运行实例的信息。我是否只是执行一个SQL查询来实现这一点,并在每次加载计数器页面时读取活动计数器的信息,或者我是否可以在网站上存储此信息,以便网站"知道" ;哪个实例当前处于活动状态,并且不需要对每个请求进行SQL查询(使用全局变量概念)?显然,上述情况只是我用来解释我的问题的简化例子。
答案 0 :(得分:1)
您可以使用ApplicationState来缓存非特定于用户的全局值。在第一个示例中,由于所有用户的数量都会递增,因此只要递增,就可以将其以事务方式存储在数据库中,并将其缓存在ApplicationState中,以便在服务器上呈现页面时可以快速读取。您必须小心确保正确处理并发,以便每次增加数字时,数据库和缓存都会以原子方式更新。
您的问题有点不清楚,但如果您的要求是还要对当前使用您网站的所有用户发布实时的更改,您需要查看真实内容时间技术。 Websockets对此很有用(如果在服务器和客户端浏览器上可用)。具体来说,在.NET平台上SignalR是实现从服务器到客户端的实时通信的好方法,并且在不支持WebSocket的情况下具有优雅的回退。
为了清楚起见,您不会在这种情况下使用会话存储(除非我误解了您的问题)。会话是按用户进行的,通常不应影响系统中的其他用户。您的示例是关于全局值的,因此在这种情况下,Session不是正确的选择。
对于第二个示例,使用ApplicationState和事务数据库提交,您应该能够缓存当前处于活动状态的计数器并随意切换它们,前提是您在执行它们之间切换时锁定所有资源。
希望有足够的信息让你朝着正确的方向前进。