缓存常规使用方式分析
2016-06-15 16:40
274 查看
概述
缓存功能是大型网站设计时要考虑的一个很重要的部分。从分布上看,可以将缓存分为客户端缓存、服务端缓存和第三方缓存。
客户端缓存
访问一个网站时,浏览器会缓存静态资源,如图片等。以后再访问的时候,它会优先使用本地缓存的文件。只有服务器端的文件更新了,或是缓存中的文件过期了,才会再次从服务端下载这些内容。服务端缓存
服务器端缓存从性质上可分为两种:静态文件缓存和动态缓存。静态文件缓存
如 果静态页面较多,且很少改动,那么这种文件最适合静态缓存。IIS6.0将这部分内容直接放在Kernel的内存中,由Http.Sys直接管理,性能非 常高。用户的请求如果在缓存中,那么Http.Sys会直接将内容发送到Network Driver上。而之前版本,则需要先将内容从IIS的User Space复制到Kernel中,然后再发送到TCP/IP Stack上。Kernel Level Cache 几乎是现在高性能Web Server的一个必不可少的特性。另外,如果愿意,静态文件还可以压缩(动态文件也可以压缩,但费效比不是很高,因为每次都要压缩,不能 一劳永逸),压缩的东西放到一个IIS指定的一个地方。如果客户端Browser支持相应的解压缩,那么压缩的内容将发送回去,解压缩工作由客户端来完 成。Browser在向Web server发送请求的时候,HTTP Request Header里面有是否支持压缩的信息。
动态缓存
动态缓存的难点在于内容的过期校验和更新处理。应用程序数据缓存
System.Web.Caching命名空间提供用于缓存服务器中常用数据的类。此命名空间包括Cache类,该类是一个字典,可以存储任意数据对象,如哈希表和数据集。它还为这些对象提供了失效功能,并提供了添加和移除这些对象的方法。
你还可以添加依赖于其它文件或缓存项的对象,并在从Cache对象中移除对象时执行回调以通知应用程序。
System.Web.Caching.CacheobjCache=HttpRuntime.Cache.
objCache.Insert(strKey,objObject,null,absoluteExpiration,slidingExpiration)
文件缓存依赖
这种策略让缓存依赖于一个指定的文件,通过改变文件的更新日期来清除缓存。这种方式非常适合读取配置文件的缓存处理。
在负载均衡的情况下,多个Web应用的缓存可依赖于同一个共享文件。
System.Web.Caching.CacheDependency dep=newSystem.Web.Caching.CacheDependency("C:\\test.txt");
var objCache=HttpRuntime.Cache;
objCache.Insert(cacheKey,objObject,dep,Cache.NoAbsoluteExpiration,Cache.NoSolidingExpiration,CacheItemPriority.Default,null)
数据库缓存依赖
这种策略让缓存依赖数据库,只有数据变化的时候才更新缓存。使用System.Web.Caching.SqlCacheDependency类,并进行相应的配置
1. 配置站点Web.Config
<system.web>
<sqlCacheDependencyenabled="true" pollTime="6000">
<databases>
<addname="db1" connectionStringName="dbConnect1"/>
</databases>
</sqlCacheDependency>
</system.web>
2. 在代码中配置数据库权限
SqlCacheDependencyAdmin.EnableTableForNotifications("db1","P_ table1");
3. 代码调用
vardep=new SqlCacheDependency("db1","P_table1");
相关文章推荐
- Autofac.Configuration 3.3.0不稳定
- Python编码问题
- 使用RoboForm自动填写表单
- swift 声明变量的?和!的区别
- Redis基础教程第6节 List
- mac下 PHP代码部署到sae上面
- POJ2406Power Strings[KMP]
- EasyUI中使用Ajax提交文件表单
- Espresso环境搭建及其基本使用
- ASP.NET应用程序与页面生命周期
- linq to js使用汇总
- iOS 开发中的 GCD 详细使用
- iOS 数字时钟(时间显示并持续更新)
- Ubuntu 16.04 下载和编译android 6 源码
- Permutations
- C++ 函数的扩展④--函数重载与函数指针
- linux shell 指令 诸如-d, -f, -e之类的判断表达式
- android更新LOGO后无法显示新LOGO的原因
- Qt,QTableWidget的两个函数item和itemAt
- mysql中计算两个日期的时间差函数TIMESTAMPDIFF用法