c#缓存介绍
缓存主要是为了提高数据的读取速度。因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少客户端与服务器端的数据交互,从而大大提高程序的性能。
本章从缓存所在的命名空间“System.Web.Caching”开始,详细介绍框架提供的缓存类和操作方法,主要涉及简单数据的缓存、数据缓存依赖和数据库缓存依赖三个技术要点,最后演示一个完全使用缓存实现数据读取的实例。讲解流程如图16-1所示。
图16-1 缓存命名空间的讲解流程
16.1 System.Web.Caching简介
本节从缓存命名空间的总体简介和组成结构入手,从整体上对System.Web.Caching进行概述。
16.1.1 System.Web.Caching概述
System.Web.Caching是用来管理缓存的命名空间。缓存就是将服务器端的数据暂时保存在客户端,方便用户的读取。缓存命名空间的父级空间是“System.Web”,由此可以看出,缓存通常用于Web网站的开发,包括在B/S项目中的开发。缓存的设计主要是考虑到网络带宽可能会延缓数据的提交和回发,如果将数据保存在客户端,用户可以直接从客户端读取数据,这样数据就是从本地提取的,不会再受网络的影响。
System.Web.Caching命名空间提供与缓存有关的所有操作类,具体包括哪些类将在下一节详细介绍。
16.1.2 System.Web.Caching命名空间内的类组成
缓存命名空间主要提供三种操作:缓存数据对象、对象的缓存依赖和数据库的缓存依赖。其中缓存任何对象都使用一个类Cache,但当缓存发生改变时,普通对象和数据库对象的依赖处理不同。
图16-2罗列的是在三层结构中缓存的部署情况。两个依赖类CacheDependency和SqlCache Dependency主要更改发生变化的缓存数据,起到通知的作用。当数据没有被缓存时,使用Cache类进行添加。
下面根据图16-2的部署,来介绍图中使用的缓存类。这些类的说明如表16-1所示。
图16-2 三层结构中缓存的部署图
表16-1 缓存命名空间中的类及其说明
类 名
说 明
Cache
对缓存对象的编辑类,其操作包括缓存的增、删、改
CacheDependency
基本缓存对象的依赖,当基本对象发生变化时,更新缓存内容
SqlCacheDependency
数据库缓存对象的依赖,当数据库中的数据变化时,更新缓存内容
16.2 管理缓存的类:Cache类
Cache类用来存储数据对象,并提供方法对这些对象进行编辑。本节主要介绍Cache类包含的方法,以及如何使用这些方法实现数据对象的缓存。
16.2.1 功能说明
Cache类属于字典类,其根据一定的规则存储用户需要的数据,这些数据的类型不受限制,可以是字符串、数组、数据表、Dataset和哈希表等。
使用Cache类的优点是当缓存的数据发生变化时,Cache类会让数据失效,并实现缓存数据的重新添加,然后通知应用程序,报告缓存的及时更新。
16.2.2 语法定义
Cache类的语法定义如下:
public sealed class Cache : IEnumerable
通过其定义可以发现,Cache类是“sealed”定义的类,表示此类被密封,不能被继承。同时Cache类还继承了IEnumerable接口,表示允许对集合中的数据进行枚举操作。
缓存的生命周期随着应用程序域的活动结束而终止,也就是说只要应用程序域依然处于活动状态,缓存就会一直保持,因为每个应用程序域都会创建一个缓存实例。此实例的信息通过HttpContext对象的Cache属性或Page对象的Cache属性获取。
下面的代码演示如何将数组数据添加到缓存中:
ArrayList myarray = new ArrayList(); //创建数组数据
myarray.Add("1.学习园地");
myarray.Add("2.交流论坛");
myarray.Add("3.帮助");
Cache.Add("Category", myarray); //将数组添加到缓存中
16.2.3 方法详解
Cache类的方法主要提供对缓存数据的编辑操作,如增、删、改等。其中最常用的方法及其说明如表16-2所示。
表16-2 Cache类的主要方法及其说明
名 称
说 明
Add
将数据添加到Cache对象
Insert
向Cache中插入数据项,可用于修改已经存在的数据缓存项
Remove
移除Cache对象中的缓存数据项
Get
从Cache对象中获取指定的数据项,注意返回的是Object类型,需要进行类型转换
GetType
从Cache对象中获取数据项的类型,判断数据类型后,方便进行转换
GetEnumerator
循环访问Cache对象中的缓存数据项。注意其返回类型是“IDictionaryEnumerator”
技巧:要想修改缓存数据,只需要重新为缓存赋值即可。
最需要注意的是Add方法,其使用语法如下:
public Object Add (
string key,
Object value,
CacheDependency dependencies,
DateTime absoluteExpiration,
TimeSpan slidingExpiration,
CacheItemPriority priority,
CacheItemRemovedCallback onRemoveCallback
)
在使用Add方法时,以上7个参数是必需的,其代表意义如下:
— 参数“key”代表缓存数据项的键值,必须是唯一的。
— 参数“value”代表缓存数据的内容,可以是任意类型。
— 参数“dependencies”表示缓存的依赖项,也就是此项的更改意味着缓存内容已经过期。如果没有依赖项,可将此值设置为NULL。
— 参数“absoluteExpiration”是日期型数据,表示缓存过期的时间,.NET 2.0提供的缓存在过期后是可以使用的,能使用多长时间,就看这
补充:软件开发 , C# ,