欢迎光临
我们一直在努力

服务器缓存

在下次客户端缓存时,代理直接返回缓存结果,提高性能。
代理缓存控制是在http头信息中cache-Control设置,当设成private时,代理不会进行缓存,

当设置为public时,代理可以进行缓存。我们可以用编程方式:

void SetPublicCache()
{
    TimeSpan ts = TimeSpan.FromSeconds(60);
    this.Response.Cache.SetMaxage(ts);//设置过期时间
    this.Response.Cache.SetNoServerCaching();//关闭服务器输出缓存
}

还可以使用OutPutCache命令:

<%@outputcache Duration="60" Location="DownStream" VaryByParam="None"%>

服务器缓存:包含内核缓存,IIS缓存,ASP.NET输出缓存,ASP.NET对象缓存,数据库缓存等
windows内核缓存:当客户端http请求到达服务器,肯定是先进windows内核模块,

然后进行一些处理,把请求委托给IIS,IIS在委托给ASP.NET应用程序,这是大致的一个过程。
windows包含一个内核模块的HTTP驱动,名为http.sys,HTTP协议在windows内核中提供了支持,提高了性能和灵活性。内核HTTP缓存默认为静态文件打开,对动态文件默认关闭。
可以启动动态内容的缓存:

<%@outputcache Duration="60" VaryByParam="None"%>

这句话也会同时启动ASPNET输出缓存。
编程方式启动:

void SetPublicCache()
{
    TimeSpan ts = TimeSpan.FromSeconds(60);
    this.Response.Cache.SetMaxage(ts);//设置过期时间
    this.Response.Cache.SetCacheability(HttpCacheability.Public);
}

内核缓存,会占用内核内存,是稀有资源,在120秒内没有命中缓存,就会被移除。
在内核缓存下面的是IIS输出缓存,可以根据查询字符串进行缓存,这是内核缓存不具备的。
再下面就是ASP.NET输出缓存:独立于IIS输出缓存,还可以根据参数改变输出,设置方式和上面是一样的,ASP.NET输出缓存还可以使用在用户控件之上,而页面可以不设置缓存。
关闭方法:this.Response.Cache.SetNoServerCaching();//关闭服务器输出缓存
还可以从输出缓存中显示指定移除项:

HttpResponse.RemoveOutPutCacheItem("/pages/default.aspx");

ASP.NET对象缓存

 

HttpContext.Application

 

HttpApplicationState app = this.Context.Application;
string myvalue = null;
app.Lock();
try
{
    myvalue = (string)app["key"];
    if(myvalue == null)
    {
        myvalue = "value";
        app["key"] = myvalue;
    }
}
finally
{
    app.unlock();
}

因为这种方式变量是多个线程可以访问的,保证一致性状态,对象本身实现的lock方法,可以运用。

 

 

HttpContext.Items

缓存只在当前请求中使用的对象
应用HttpContext.Items缓存当前请求中需要的对象,请求结束后会销毁:

 

this.Context.Items["key"] = "value";

使用场景是用户控件之间共享数据,httpModule与页面之间交互机制。

 

HttpContext.Cache

 

可以使用HttpContext.Cache缓存不止一个用户需要且由多个页面请求的对象。
使用:

public Static Object lockObject = new object();
lock(lockObject)
{
    if(this.cache["key"] == null)
    {
        this.cache["key"] = "value";
    }
}

还可以指定运行时保留的时间

if(this.Cache["key"] == null)
{
    this.Cache.Add("key","value",null,DateTime.Now.AddSeconds(60)

        ,CacheItemPriority.High,null);//指定时间,是否滑动过期,等级是否高
}

还可以让缓存依赖于文件:

public class XmlDepend
{
    public static object lockobject = new object();
    public static XmlDocument MyDocument(string path)
    {
        string key = "mydoc:"+path;
        Cache cache = HttpContext.Current.Cache;
        lock(lockobject)
        {
            xmlDocument doc = (XmlDocument)Cache[key];
            if(doc==null)
            {
                doc = new XmlDocument();
                doc.Load(path);
                CacheDependency cd = new CacheDependency(path);
                cache.Insert(key,doc,cd);
            }
            return doc;
        }
    }
}

这会将一个xml文件路径给方法,用它构造一个缓存键,如果xmlDocument仍然在缓存中则返回它,否则就从硬盘加载,并创建缓存依赖,当xml文件被修改时,它会通知,并移除xmldocument的存环对象。

  • 海报
海报图正在生成中...
赞(0) 打赏
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
文章名称:《服务器缓存》
文章链接:https://www.456zj.com/5500.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址