代码之家  ›  专栏  ›  技术社区  ›  Miyagi Coder

ASP中的数据缓存与会话对象。网

  •  11
  • Miyagi Coder  · 技术社区  · 17 年前

    网站的动态业务对象应该存储在用户会话中还是使用ASP。网络缓存(订单、配置文件信息等对象)?

    我曾与使用会话存储业务对象的网站合作过,但我想知道…缓存的优点或缺点是什么?

    5 回复  |  直到 15 年前
        1
  •  24
  •   tvanfosson    17 年前

    如果对象可以在用户会话之间共享,则使用缓存。如果对象对于每个会话都是唯一的——也许是因为它们受权限控制——那么就将其存储在会话中。进程内会话本身存储在缓存中,因此决定因素应该是数据的范围。

        2
  •  7
  •   Anton Gogolev    17 年前

    缓存就是这样——缓存。你永远不能依赖那里的条目,所以在这方面不必做出任何假设:准备好直接去数据库(或其他任何地方)重新提取数据。

    另一方面,Session更适合存储对象,尽管就我个人而言,我试图避免使用Session存储,而使用DB。我通常通过抽象出不透明的商店来做到这一点 ISessionStoreService 接口:

    interface ISessionStore
    {
        T GetEntry<T>(string key);
        void SaveEntry<T>(string key, T entry);
    }
    

    然后“依赖注入”适当的实现,无论是 InmemorySessionStore , DbSessionStore 或者别的什么。

        3
  •  2
  •   Chris Marisic    17 年前

    ASP。NET系统缓存对应用程序是全局的,因为会话对当前用户是唯一的。如果您选择使用全局缓存来存储对象,则需要创建一个对象标识策略,以便为每个用户获取正确的对象。

    如果你想提高性能,最好更换ASP。NET会话状态,具有分布式内存缓存,如微软的速度。微软发布了关于如何取代会话使用以瞄准Velocity的文章。您还可以以相关的方式使用Memcache或其他类似产品。

        4
  •  2
  •   Jaime Febres    17 年前

    会话对象适用于仅限用户的数据,另一方面,缓存对象更适合应用程序共享的数据。
    保存在其中一个或另一个中的关键是确定您试图存储的是仅限用户的数据,还是需要在所有应用程序中共享。

    会话=>具有分步界面的网页(例如在线测试)。
    缓存=>显示在某种天气小部件中的信息(比如谷歌在其igoogle.com页面中的信息)。
    希望这能有所帮助。

        5
  •  1
  •   Masoud Tabatabaei    13 年前

    虽然您可以将业务对象存储在Cache中,但Cache的设计目的是提高性能,而不是状态管理。想象一下,你有一个从数据库中获取1000条记录的过程(大约需要3秒),你需要它几分钟。您可以将对象存储在缓存中,并设置其过期日期、优先级和依赖关系(如SqlDependency或FileDependency),因此对于下一个请求,您可以使用缓存数据,而不是从数据库中检索。您可以将对象存储在Session中,但默认情况下无法设置Session的依赖关系。Cache还有一个独特的行为,当系统需要内存时,它会根据优先级从缓存中释放对象。缓存对象对应用程序是全局的,并在所有用户之间共享,但会话不共享,可供每个用户使用(会话)。

    推荐文章