在Asp.Netzhonng 提供了Cache类来操作它。此类提供了很多功能,包括设置依赖项、管理过期和控制缓存对象如何使用内存以便从关键操作中恢复。
Cache类添加对象到缓存对象中具体使用其Insert和Add方法,这两个方法十分相似,唯一的区别在于Add方法须用于控制所有提供的功能的参数而Insert方法允许某些参数可选,让其使用默认值的参数。
Add的语法:
Cache.Add ( KeyName, //用于引用该项的缓存键
KeyValue, //要添加到缓存的项
Dependencies, //该项的文件依赖项或缓存键依赖项
AbsoluteExpiration,//所添加对象将过期并被从缓存中移除的时间
SlidingExpiration,
//最后一次访问所添加对象时和该对象过期时之间的时间间隔
Priority, //对象的相对成本,由 CacheItemPriority 枚举表示
CacheItemRemovedCallback ///在从缓存中移除对象时所调用的委托
)
Insert的语法同Add相似,但传入的参数是可选的
- Cache.Inset(KeyName,KeyValue)
- Cache.Inset(KeyName,KeyValue,Dependencies)
- Cache.Inset(KeyName,KeyValue,Depedencies,AbsoluteExpiration)
- Cache.Inset(KeyName,KeyValue,Depedencies,AbsoluteExpiration,SlidingExpiration,Priority,CacheItemRemovedCallback)
下面来介绍下依赖项(Dependencies)
依赖项是指缓存项和一个时间点,或一个外部对象的关系。若过了某个设计时指定的时间点,或者某个外部对象改变时,缓存项将过期或者从缓存中被移出。我们控制依赖项的外部对象可以是一个文件、目录、文件或目录数组、另一个保存在缓存中的项,或一个保存在缓存中的项的数组。而时间点可以是一个绝对时间也可是一个相对时间。
文件变更依赖
文件变更依赖是指若某个特定的文件改变,缓存项过期且从缓存中移出。如:
Cache.Insert("GridViewDataSet", dsGrid, fileDepends);
我们首先建立一个与XmlFile文件夹下Northwind.xml的关联项,接着将其放入缓存,当文件发生变化(数据被修改等)时,该缓存将自动实效并从缓存中移出
以上只是针对利用缓存依赖监控某一文件,如果说我们要监控一批文件或目录的话,我们需要将该一批文件或目录放入一个数组中并将其放入缓存,如下:
string[] fileDependsArray = { Server.MapPath("XmlFile/Northwind.xml"),
Server.MapPath("XmlFile/Books.xml") };
CacheDependency fileDepends = new CacheDependency();
Cache.Insert("GridViewDataSet", dsGrid, fileDepends)缓存项依赖
一个缓存项可依赖于缓存中的其他项。若一个缓存项依赖于一个或多个其他缓存项,则当依赖的任何一个缓存项发生改变时,该项将过期,并从缓存中将其移除。如:
string[] cacheDependsArray = { "Depend0", "Depend1", "Depend2" };
CacheDependency cacheDepends = new CacheDependency(fileDependsArray, cacheDependsArray);
Cache.Insert("GridViewDataSet", dsGrid, cacheDepends);
我们创建了缓存依赖项cacheDepends,当缓存中的任何信息发生变化时则相应的缓存项将自动实效并从缓存中移出。
时间依赖
缓存项可基于时间实现依赖,可通过向Cache对象的Add或Insert方法传入两个参数玩成。控制时间依赖的两个参数是AbsoluteExpiration和SlidingExpiration。
语法:
说明:
如果不需要文件或者缓存项依赖,则Dependencies参数应该设置为null。
AbsoluteExpiration参数时DateTime类型,它为缓存项定义了一个生命期。该参数值可以是绝对时间,也可以是相对时间(如)
Cache.Insert("GridViewDataSet", dsGrid, null,expDate,Cache.NoSlidingExpiration);
Demo下载
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端