在会话和缓存中存储数据表有什么区别?优点和缺点是什么?
因此,如果它是一个简单的搜索页面,它会在数据表中返回结果并将其绑定到gridview。如果用户'a'搜索和用户'b'搜索,最好将其存储在Session中,因为每个用户很可能会有不同的结果,或者我是否仍可以将他们的每个搜索存储在Cache中,或者没有意义,因为存在只有一个缓存。我想基本上我想说的是缓存将被覆盖。
在会话和缓存中存储数据表有什么区别?优点和缺点是什么?
因此,如果它是一个简单的搜索页面,它会在数据表中返回结果并将其绑定到gridview。如果用户'a'搜索和用户'b'搜索,最好将其存储在Session中,因为每个用户很可能会有不同的结果,或者我是否仍可以将他们的每个搜索存储在Cache中,或者没有意义,因为存在只有一个缓存。我想基本上我想说的是缓存将被覆盖。
HttpContext.Current.Cache vs HttpRuntime.Cache
?
Answers:
一个重要的区别是,缓存中的项目可以在指定的时间后过期(将从缓存中删除)。放入会话的项目将保留在那里,直到会话结束。
当可用内存量变小时,ASP.NET还可以从缓存中删除项目。
另一个区别是:会话状态可以保留在外部(状态服务器,SQL服务器),并可以在Web应用程序的多个实例之间共享(以实现负载平衡)。高速缓存不是这种情况。
除了这些差异(如其他人所述)之外:会话是每个用户/会话,而缓存是每个应用程序。
AFAIK,主要区别是会话是每个用户,而缓存将用于应用程序范围的项目。
如其他答案所述,您可以将每个用户的信息存储在缓存中,只要您提供密钥(通过会话或cookie)即可。然后,您将有更多控制权来使缓存中的项目过期,并对其设置依赖关系。因此,如果所讨论的DataTable会定期更改,则缓存可能是一个适当的选择。否则,如果是静态会话,则可能更合适。史蒂文·史密斯(Steven Smith)有一个关于dnrtv缓存的出色视频,值得一看。
这实际上取决于您要达到的目标,获得的时间。关于在应用程序中存储状态的方式,还有其他一些可供考虑的选择。根据表的大小,您可以考虑将状态存储在cookie中(如果是敏感信息,则将其加密)。另外,如果是应用程序范围的数据,则您可以在页面或类上使用静态字段。也有Application对象。
更新:我认为您必须问自己的关键问题是谁应该看到此数据。
Are they going to access the data frequently?
(不,不要打扰)。
Is it going to change?
(否,请使用静态字段或应用程序)。
Is it acceptable for user a and user b to see the same results?
(不,将高速缓存与包含用户名和搜索词的键一起使用。)。
(是的,请使用搜索词的键来使用缓存)。
不过,老实说,如果您的开发进度不理想,我会考虑将缓存/状态问题推迟到以后的日期-您甚至可能不需要它。
性能调整的前三个规则是:1.测量,2.测量更多。3.再次测量...
缓存属于“应用程序”范围,其目的是减少获取一条数据的次数。会话处于用户的会话范围内,目的是赋予特定的用户状态。
会话是针对每个用户的,缓存是针对应用程序的。
缓存中的项目可以并且将根据IIS工作进程的过期时间(滑动或固定)和内存限制自动删除。
因此,基本上,永远不会保证Cache中的项目存在,但Session会保留在那里直到会话结束。
基于每个用户(通过Session或创造性地使用Cache)存储项目可能会导致大量内存使用,因此应谨慎考虑。
最重要的是,如果IIS重置工作进程,则可能会丢失缓存和会话。
据我所知,这完全取决于您的需求。
每当需要维护用户状态时,在使用会话时都必须非常小心。默认设置为“ InProc”,它使用单个服务器的内存,在基于云的应用程序中不能很好地工作。这可能适用于在多实例Web场环境中托管应用程序的您。Windows Azure负载平衡器在连接的节点内使用循环分配。
会话存储中有多个选项。SQL Server也可以用作会话状态的存储。自定义会话技术可在诸如表存储提供者之类的Azure上使用。
缓存也存储在服务器的内存中,但用户无需担心。同一池中的任何用户都可以访问应用程序缓存数据。简而言之,在云上,我们需要使用云提供商提供的缓存服务。Azure提供Windows Azure分布式缓存服务。
实际上,当在应用程序中应用状态管理技术时,开发人员并不关心状态管理技术的影响。它
“如果您的客户端没有云支持,那么您不必担心云方案”