C# .NET核心MVC-会话存储

C# .NET核心MVC-会话存储,c#,asp.net-core-mvc,C#,Asp.net Core Mvc,这更像是一个讨论,因为我正试图找出在.NET核心MVC中获取/存储/检查数据对象的最干净的方法 情况如下: 问题 用户登录到webapp->Service Fire,创建用户对象(强类型列表) 此用户对象控制应用程序的外观和感觉,列表中的所有数据都是静态的 此列表被分配给ViewBag并用于Razor页面 唯一的问题是,每次后续页面更改或刷新时,都会再次提取用户对象 有些人可能不认为它有那么糟糕,但是这个对象通常需要7秒左右的时间才能返回到呈现页面的客户端,并且在每个页面上,开始变得非常痛苦 有

这更像是一个讨论,因为我正试图找出在.NET核心MVC中获取/存储/检查数据对象的最干净的方法

情况如下:

问题

用户登录到webapp->Service Fire,创建用户对象(强类型列表) 此用户对象控制应用程序的外观和感觉,列表中的所有数据都是静态的

此列表被分配给ViewBag并用于Razor页面

唯一的问题是,每次后续页面更改或刷新时,都会再次提取用户对象

有些人可能不认为它有那么糟糕,但是这个对象通常需要7秒左右的时间才能返回到呈现页面的客户端,并且在每个页面上,开始变得非常痛苦

有目的的解决方案

所以我的理论是,加载用户模型一次,包括一个名为“lastload”的日期时间字段,然后将用户模型和当前日期时间写入MVC中某种形式的会话存储

然后在每个页面上都有一些代码来检查LastLoaded字段,如果datediff大于10分钟,则重新加载用户对象

因此,我需要知道的是在MVC中存储列表对象并使其在页面加载和刷新后仍然有效的最佳方法。然后如何检索该用户对象并将其应用于ViewBag

我非常愿意接受建议,即使我的前提有缺陷,而且有更好的方法来实现这一点。请告诉我您过去是否遇到过这个问题,以及您实施了哪些解决方案


我建议使用分布式缓存,而不是会话。分布式缓存,如Redis或NCache或AppFabric缓存。这些技术是专门为处理这种情况而设计的,它们具有易于集成的库。通过使用分布式缓存,您可以使应用程序和缓存独立可扩展。他们还提供了性能工具来监控缓存的使用和性能

理想情况下,我会将对象保存在缓存中,当我修改对象时,我会继续在修改后将对象放入缓存,假设我会立即再次访问它

这些缓存具有各种缓存超时设置,因此不经常访问的旧对象将自动删除


虽然会话是针对每个用户的,缓存是针对每个人的,但您可以通过在缓存键前面加上用户id来轻松更改缓存键。

如果不在ViewBag中传递数据集,并在加载页面后通过单独的服务调用加载数据集,该怎么办?听起来您想将此数据的管理工作转移到客户端,这样客户端负责获取/管理此数据(作为cookie或其他内部存储)就更有意义了。嘿@AllMadHare我使用API调用和本地存储为许多其他事情做了这件事。虽然如果我对用户对象这样做,它会变得毫无用处,但我主要担心的是,这样做实际上是在后台使用HTML网页和jquery以及Web API项目。我还担心,一旦我使用js进入localstorage,我就失去了我的强大模型,这看起来非常全面,我将不得不大量阅读这些东西,因为我以前从未接触过它。从表面上看,这似乎是我想要做的,所以我会标记正确。是时候好好研究一下这些东西了!