在会话中存储数据与从数据库中检索到达时间?

时间:2012-07-14 23:34:10

标签: asp.net database visual-studio-2010 oracle devexpress

我只是在学习ASP.net,也为同一个朋友制作一个网络应用程序。

现在,在我的应用程序中,有一个表将用户映射到公司的分支,另一个表将分支映射到客户端。当用户登录时,我会查询一个查询以获取他/她有权访问的分支列表,然后另一个查询以获取他负责的所有客户列表。这种情况发生了很多次,并且在许多页面上都是必需的。

另外,我正在使用DevExpress的GridView和GridViewLookUp工具。如果你熟悉它们,它们就像ASP.net中的GridView一样,每次显示的条目被排序或者选择不同的页面来查看条目时都会引发回发。基本上,我想要知道我必须多次触发上述两个查询。

用户通常负责的客户平均为100-150个。

所以我想知道的是,对于一个高的数字,我应该检索所有客户端名称并将它们存储在会话中,这样只要用户被记录,我就不必再次连接到数据库在?或者我应该保持原样并让它每次都从数据库中找到客户端?

1 个答案:

答案 0 :(得分:1)

由于此数据特定于登录用户,因此您可以将其保留在Session变量中。另一个备选方案是在UI /业务逻辑和数据访问之间实现Cache层。每天查询一次(或您定义的间隔 - 缓存持续时间)并将其保留在Cache中。并且下次当你的UI需要时从那里获取它。如果数据为null,则表示缓存已过期。再次查询并存储它。缓存数据对所有用户都是全局的,而会话数据特定于该用户会话。

如果您有这么多请求进入,那么在会话中为每个请求保留150个客户端对象的副本(它有多大?)与将其保留在Cache中相比似乎有点不好。所以我认为你应该选择缓存层选项。