【问题标题】:.NET Core MVC - Session Storage.NET Core MVC - 会话存储
【发布时间】:2017-05-26 04:08:17
【问题描述】:

这更像是一个讨论,因为我试图找出在 .NET Core MVC

中获取/存储/检查数据对象的最简洁方法

场景是这样的:

问题

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

此列表分配给 ViewBag 并在 Razor 页面上使用。

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

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

有针对性的解决方案

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

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

所以我需要知道的是在 MVC 中存储 List 对象并让它在页面加载和刷新后仍然存在的最佳方法。然后如何检索该用户对象并将其应用于 ViewBag。

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

卡兹

【问题讨论】:

  • 如何在页面加载后通过单独的服务调用加载 ViewBag 中的数据集,而不是传递数据集?听起来您想将这些数据的管理卸载到客户端,因此客户端负责获取/管理这些数据(无论是作为 cookie 还是其他内部存储)会更有意义
  • 嘿@AllMadHare 我已经为许多其他事情做到了这一点,使用 API 调用和本地存储。虽然如果我为 User 对象这样做,它有点使剃刀无用,但我主要担心的是,这样做我实际上是在后台使用 HTML 网页和带有 Web API 项目的 jquery。一旦我使用 js 去 localstorage 我也会担心我会丢失我的强大模型

标签: c# asp.net-core-mvc


【解决方案1】:

我建议使用分布式缓存而不是 Session。分布式缓存,例如 Redis 或 NCache http://www.alachisoft.com/ncache/ 或 AppFabric 缓存。这些技术是专门为处理这种情况而设计的,并且它们具有易于集成的库。通过使用分布式缓存,您可以使您的应用程序和缓存独立扩展。它们还附带性能工具来监控缓存的使用和性能。

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

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

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

【讨论】:

  • 哇,这看起来很充实,因为我以前没有接触过它,所以我必须阅读大量这些东西。表面上看起来像我想做的,所以我会标记为正确的。是时候开始研究这些东西了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多