2

我正在尝试在我的程序中实现缓存。我有一个 Web 应用程序,可让用户访问某些学习课程。当用户登录时,我从我们的数据库中对他进行身份验证。现在,如果从列表中访问不同的课程,我不想返回数据库。相反,我想将值存储在缓存中,让我们说 20 分钟。程序应该 1) 对用户进行身份验证,并让他访问课程。如果他改变了课程,程序应该在缓存中查找。如果用户 id 存在,让他访问课程而无需返回服务器。2) 提供一种机制,如果 20 分钟后用户仍在系统上,则自动更新时间。因此,用户不会被注销。我尝试过这样的事情

Cache ch = new Cache();
ch.Add("key","value);

但我在第二条语句中得到空引用异常。我以前从未使用过缓存,因此将不胜感激。

4

4 回答 4

2

好吧,这就是我使用它的方式:

/// <summary>
/// Get Data
/// </summary>
/// <returns>data</returns>
public static ElementOut GetData()
{
    //function return value
    ElementOut functionReturnValue = new ElementOut();

    try
    {
        string key = "data";
        if (HttpRuntime.Cache[key] == null)
        {
            //fetch data
            var data = CreateBLLAdapter().GetData();

            //validate data
            if (data == null) throw new Exception("data is empty!");

            //set cache to 12 hours
            DateTime timeToExpire = DateTime.Now.AddHours(12);

            //set cache
            HttpRuntime.Cache.Insert(key, data, null, timeToExpire, Cache.NoSlidingExpiration);
        }

        //set return from cache
        functionReturnValue = (ElementOut)HttpRuntime.Cache[key];

    }
    catch (Exception ex)
    {
        //Log.WriteServerErrorLog(ex);
    }

    return functionReturnValue;
}
于 2012-05-31T05:29:10.177 回答
1

Cache当前 HTTP 上下文的使用:

HttpContext.Current.Cache

描述:当一个新的 HTTP 请求到来时,应用程序会在一个通常称为Request Process Pipeline的管道中处理该请求,也就是说,它会一个接一个地对请求执行一些操作,然后再将请求交给您的处理程序进行处理。

ASP.NET 执行的操作之一是根据某些参数加载会话和缓存数据。

HttpContext.Current.Cache是加载的缓存,你可以使用它。然后,当您在该缓存中存储某些内容时,ASP.NET 再次负责存储该缓存并将其保存在下一个 HTTP 请求中。

您还可以使用页面的属性访问该全局对象Cache

于 2012-05-31T05:34:20.343 回答
0

如果您在 ASP.NET 中开发,您可以简单地使用ASP.NET session store,它为每个用户存储值,只要他的会话持续(默认情况下是他最后一次操作后的 20 分钟)

于 2012-05-31T05:30:55.830 回答
0

您可以尝试输出缓存。

请参阅下面的链接了解更多详情。 http://msdn.microsoft.com/en-us/library/ms178597.aspx

于 2012-05-31T05:31:55.600 回答