代码之家  ›  专栏  ›  技术社区  ›  arlen

使用会话防止往返请求

  •  1
  • arlen  · 技术社区  · 15 年前

    我在用户控件中有一个Telerik菜单,位于aspx页面,我需要根据登录的用户生成菜单。

    所以我需要将数据源绑定到菜单。 我的网站每天会有超过1000个用户。 为了防止往返请求,我从会话生成菜单。
    为此,我使用InProc session并将Sql数据保存在session中。

    菜单的会话对象大小约为40字节。所以(1000个用户)*(40字节)=大约40K服务器的内存。 我没有其他服务器可以使用StateServer会话。 我也会把会话用于其他目的。

    有没有更好的解决方案,因为性能对我的场景起着关键作用。 或者我已经选择了最好的解决方案?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Community Mohan Dere    9 年前

    听起来你这样做没什么问题,但你可能对 my answer to this question .

    一般来说,会话是缓存以下数据的好地方:

    1. 相对较小,
    2. 很昂贵,而且
    3. 不需要在给定用户的会话之外使用

    听起来你至少符合上面的前两个要求。

    我参与的一个项目的需求与您描述的类似,但许多用户最终会得到完全相同的菜单,而且菜单本身的生成成本很高,所以我将问题分成了几个部分,如下所示:

    • 用户的PersonId存储在会话中。
    • MenuKeyRepository将获得一个列表,其中列出了给定人员ID需要显示的菜单项键的ID,并将此列表作为“MenuKey”返回。
    • MenuRepository将根据给定的MenuKey生成实际菜单。

    这两个存储库使用了滑动内存缓存,因此在大多数情况下,菜单键和菜单本身都已经构建好了。如果一个新用户登录,但是应该看到与其他最近用户相同的菜单项,那么第一个存储库需要构造它们的菜单键,但是实际的菜单已经被缓存。

    我不知道这种方法对你是否有意义,但它确实是值得的。

        2
  •  1
  •   Oded    15 年前

    假设会话超时不是问题,看起来已经是一个很好的解决方案了。