Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 如何保存经常使用的值而不必每次都通过数据库?_Asp.net Mvc 3 - Fatal编程技术网

Asp.net mvc 3 如何保存经常使用的值而不必每次都通过数据库?

Asp.net mvc 3 如何保存经常使用的值而不必每次都通过数据库?,asp.net-mvc-3,Asp.net Mvc 3,我正在制作一份调查问卷,我想保存用户已完成的问题数量和可用的问题数量。我知道如何计算这些值,但我不想在每次用户请求显示这些信息的页面时(这是非常常见的)遍历数据库 我考虑将其保存在会话中,但问题是会话在身份验证之前过期,因此信息可能会丢失,但用户仍将登录 有什么建议吗 编辑:我忘了提到我正在服务器上工作,在那里我自己无法指定会话超时。此外,当用户回答问题时,必须更新已回答问题的数量 关于缓存和ASP.NET的一个非常有趣的资源是 由于无法指定会话超时,请使用-它支持几种不同的机制来确定何时放弃缓

我正在制作一份调查问卷,我想保存用户已完成的问题数量和可用的问题数量。我知道如何计算这些值,但我不想在每次用户请求显示这些信息的页面时(这是非常常见的)遍历数据库

我考虑将其保存在会话中,但问题是会话在身份验证之前过期,因此信息可能会丢失,但用户仍将登录

有什么建议吗


编辑:我忘了提到我正在服务器上工作,在那里我自己无法指定会话超时。此外,当用户回答问题时,必须更新已回答问题的数量

关于缓存和ASP.NET的一个非常有趣的资源是

由于无法指定会话超时,请使用-它支持几种不同的机制来确定何时放弃缓存项

编辑-根据评论:

对于缓存,您应该实现“直写”方案,即始终同时更新缓存和数据库,这意味着缓存始终正确,并且在应用程序启动时初始加载后,任何读取都不会命中数据库


另一个选项是更新数据库并使缓存项无效。。。在下一次读访问中,您将获得一个“缓存未命中”,并通过点击数据库并将结果保存到缓存中来处理该问题。。。这样,您在worstcase中的读操作和写操作一样频繁地命中DB。。。这种模式只会帮助你读更多的文章……

你可以考虑增加会话超时。

会话通常在每次向服务器发出请求时被扩展,所以当有人使用问卷时,定期使用JavaScript向服务器发送请求,以确保会话不会结束。

tha缓存类独立于会话超时工作-请参阅我的答案中的链接…当已回答的问题计数更新(用户已回答新问题)时,缓存不再有效。您将如何更新它?@Kenci对于每个缓存,您应该实施一个“直写”方案(即始终同时更新缓存和数据库)。@Kenci另一个选项是在更新和下次读取访问时使缓存值无效,检查缓存(如果不在缓存中,则将其加载到缓存中)等。我喜欢您的答案和您的努力!我不是在数据库中保存回答的问题的数量,而是通过检查每个问题来计算,看看是否所有可能的答案都得到了回答,然后将其汇总。因为我有很多问题和答案的可能性,这将是对数据库的大量调用,这是写通方案所需要的。我想在用户登录时获取一次号码,然后在内存中更新它。我想我会同意@Kae Verens的回答,但是谢谢你的帮助。如果我错了,请纠正我。