如何在ASP.NET中跨多个会话存储(缓存?)数据

本文关键字:存储 会话 缓存 数据 ASP NET | 更新日期: 2023-09-27 18:01:41

我正在写一个c# ASP。NET Web表单应用程序。为了简单起见,这个应用程序从服务器检索数据并显示给用户。

要访问这个服务器,我的应用程序需要生成登录信息。生成登录信息需要几分钟。这个登录信息每天都在变化,但对于使用我的应用程序的每个人(在特定的一天)来说都是一样的。

我的应用程序每天将被数百人使用。让每个用户等待几分钟来检索登录信息对我来说是愚蠢的。

理想情况下,我想每天收集一次登录信息,并将结果存储在我的服务器上。

提示吗?我知道。net有CacheSession,但它们只存储单个用户的数据。您是否有任何技术来存储此登录信息,以便我可以从我的代码后面抓取它?

如何在ASP.NET中跨多个会话存储(缓存?)数据

你错了,缓存工作在应用程序级别,而不是在用户级别,从MSDN

应用程序通常可以通过将数据存储在经常被访问并且需要显著性的内存创建的处理时间。例如,如果您的应用程序处理使用复杂逻辑处理大量数据,然后将数据返回为用户频繁访问的报表,可以有效避免每次用户请求报表时都重新创建报表。同样的,如果您的应用程序包含处理复杂数据的页面,但是它只是不经常更新,对于服务器来说效率很低每个请求都重新创建该页面。

为了帮助您在这些情况下提高应用程序性能,ASP。. NET使用两种基本缓存机制提供缓存。第一个是应用程序缓存,它允许你缓存生成的数据,例如DataSet对象或自定义报表业务对象。的第二种是页面输出缓存,它保存页面的输出处理和重用输出,而不是重新处理页面当用户再次请求该页时。

我认为Application cache比另一个更合适

有两种方法来控制它,你可以设置X分钟作为限制,然后设置你想要的:

  1. Absolute:对象创建后X分钟后数据过期

    Cache.Insert("key", myTimeSensitiveData, null, DateTime.Now.AddMinutes(1), TimeSpan.Zero); 
    

绝对过期:这个示例将缓存时间敏感数据一分钟,此时点缓存将过期。注意绝对过期和滑动Expiration(下)不能同时使用。

  • 滑动:从最后一个用户使用缓存对象起X分钟后数据过期

    Cache.Insert("key",myFrequentlyAccessedData, null, System.Web.Caching.Cache.NoAbsoluteExpiration,  TimeSpan.FromMinutes(1));
    
  • 滑动过期:这个例子将缓存一些常用的数据。数据将保留在缓存中,直到1点一分钟过去了,没有任何引用它的东西。注意滑动过期和绝对过期不能同时使用。

    示例来源:MSDN:缓存API,使用缓存对象