gpt4 book ai didi

c# - DAL、 session 、缓存架构

转载 作者:行者123 更新时间:2023-12-03 21:51:48 26 4
gpt4 key购买 nike

我正在尝试为我的 Web 应用程序创建数据访问层。目前,所有数据表都存储在 session 中。当我完成后,DAL 将填充并返回数据表。将返回的数据表存储在 session 中是个好主意吗?分布式/共享缓存?还是每次都ping数据库?注意:通常数据表中的行数会小于 2000。

附加信息:

几乎没有数据是共享的。发送到 SQL 查询的参数由用户选择。用户可用的参数值取决于用户是谁。在大多数情况下,两个用户不可能运行相同的 sql 查询。但是,同一个用户可以多次运行同一个查询。

更多信息:
并发用户数 ~50,000

重要信息:
在 99% 的情况下,不会有两个用户拥有相同的数据/查询,但是,同一用户可能会多次运行相同的查询/获取相同的数据。

谢谢

最佳答案

在 session 中存储数据不是一个好主意,因为:

  • 每个用户都会获得相同数据的单独副本——服务器内存的巨大浪费。
  • 如果您用太多数据填充 session ,IIS 将回收 session 。

  • 我建议将数据表存储在 Cache ,并且仅在第一次请求时才填充每个表,而不是一次全部填充。这样,如果 IIS 开始回收缓存中的空间,您的代码将不会受到影响。

    按需获取的非常简单的示例:
    T GetCached<T>(string cacheKey, Func<T> getDirect) {
    object value = HttpContext.Current.Cache.Item(cacheKey);
    if(value == null) {
    value = getDirect();
    HttpContext.Current.Cache.Insert(cacheKey, value);
    }
    return (T) value;
    }

    编辑: - 问题更新

    缓存与本地 session - 本地 session 状态是全有或全无。如果它太满,IIS 将回收其中的所有内容。相比之下,当内存太低时,缓存项会单独删除,因此问题要小得多。

    缓存与 session 状态服务器 - 我没有任何数据来备份它,所以如果我弄错了,请说出来,但我认为在每个物理服务器 AppDomain 的内存中独立缓存数据会更好地扩展而不是将其存储在共享 session 状态服务中。

    关于c# - DAL、 session 、缓存架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2684918/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com