ASP.NET Cache是提升系统性能的重要方法,它使用了“最近使用”原则(a least-recently-used algorithm)。在数据库访问中经常会用到Cache保存数据库数据。
1.缓存的添加:
Cache的添加方法有Add()或Insert(),两种方法几乎类似,只是Inser方法可以使用可选参数,即使用默认参数,来实现缓存的添加:
Cache.Add(
KeyName,//缓存名
KeyValue,//要缓存的对象
Dependencies,//依赖项
AbsoluteExpiration,//绝对过期时间
SlidingExpiration,//相对过期时间
Priority,//优先级
CacheItemRemovedCallback);//缓存过期引发事件
2. 缓存依赖项:
缓存可以设置的时效性可以通过 文件依赖,其他缓存依赖,数据库依赖和过期时间方法来设置,当文件改变,依赖缓存项改变,数据库改变或时间的到期时,缓存会失效,并可以引发一定事件。
2.1 文件依赖:
CacheDependency fileDepends = new CacheDependency(Server.MapPath("Northwind.xml"));
Cache.Insert("GridViewDataSet", dsGrid, fileDepends);
此例为通过Northiwind.xml文件依赖出来缓存的用法:
2.2 其他缓存项依赖:
string[] fileDependsArray = {Server.MapPath("Northwind.xml")};
string[] cacheDependsArray = {"Depend0", "Depend1", "Depend2"};
CacheDependency cacheDepends = new CacheDependency(fileDependsArray, cacheDependsArray);
Cache.Insert("GridViewDataSet", dsGrid, cacheDepends);
此例设置了Northwind.xml文件依赖和 Depend0,depend1,Depend2缓存项
其中Depend0,depend1,Depend2为另外三个缓存。
如果不需要文件依赖可以设置为NULL。
2.3 过期时间设定:
AbsoluteExpiration可以设置缓存的绝对过期时间,如:
Cache.Insert("GridViewDataSet ", dsGrid, null, DateTime.Now.AddMinutes(30), Cache.NoSlidingExpiration);
缓存会在添加起30分钟后过期。
NoSlidingExpiration可以设置相对过期时间,如果缓存在NoSlidingExpiration设定的时间内没有被访问,缓存过期,如果在这段时间内有访问,则缓存过期时间将会重置为原始值,如NoSlidingExpiration=20
在20分钟内如果没有被访问,缓存过期,如果每次19分钟访问缓存,缓存将永远不会过期。
Cache.Insert("DataGridDataSet", dsGrid, null,Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(30));
3. 优先级:
Priority属性值和意义:
Priority value
Description
NotRemovable
Items with this priority will not be evicted.
High
Items with this priority level are the least likely to be evicted.
AboveNormal
Items with this priority level are less likely to be evicted than items assigned Normal priority.
Default
This is equivalent to Normal.
Normal
The default value.
BelowNormal
Items with this priority level are more likely to be evicted than items assigned Normal priority.
Low
Items with this priority level are the most likely to be evicted.
4. 缓存失效事件处理:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Web.Caching; // necessary for CacheDependency
using System.Xml; // necessary for Xml stuff
public partial class _Default : System.Web.UI.Page
{
public static CacheItemRemovedCallback onRemove = null;
protected void Page_Load(object sender, EventArgs e)
{
CreateGridView( );
}
private void CreateGridView( )
{
DataSet dsGrid;
dsGrid = (DataSet)Cache["GridViewDataSet"];
onRemove = new CacheItemRemovedCallback(this.RemovedCallback);
if (dsGrid == null)
{
dsGrid = GetDataSet( );
string[] fileDependsArray = {Server.MapPath("Northwind.xml")};
string[] cacheDependsArray = {"Depend0", "Depend1", "Depend2"};
CacheDependency cacheDepends = new CacheDependency
(fileDependsArray, cacheDependsArray);
Cache.Insert("GridViewDataSet", dsGrid, cacheDepends,
DateTime.Now.AddSeconds(10),
Cache.NoSlidingExpiration,
CacheItemPriority.Default,
onRemove);
lblMessage.Text = "Data from XML file.";
}
else
{
lblMessage.Text = "Data from cache.";
}
gv.DataSource = dsGrid.Tables[0];
gv.DataBind( );
}
private DataSet GetDataSet( )
{
DataSet dsData = new DataSet( );
XmlDataDocument doc = new XmlDataDocument( );
doc.DataSet.ReadXml(Server.MapPath("Northwind.xml"));
dsData = doc.DataSet;
return dsData;
}
public void RemovedCallback(string cacheKey,
Object cacheObject,
CacheItemRemovedReason reasonToRemove)
{
WriteFile("Cache removed for following reason: " +
reasonToRemove.ToString( ));
}
private void WriteFile(string strText)
{
System.IO.StreamWriter writer = new System.IO.StreamWriter(
@"C:"test.txt", true);
string str;
str = DateTime.Now.ToString( ) + " " + strText;
writer.WriteLine(str);
writer.Close( );
}
protected void btnClear_Click(object sender, EventArgs e)
{
Cache.Remove("GridViewDataSet");
CreateGridView( );
}
protected void btnInit_Click(object sender, EventArgs e)
{
// Initialize caches to depend on.
Cache["Depend0"] = "This is the first dependency.";
Cache["Depend1"] = "This is the 2nd dependency.";
Cache["Depend2"] = "This is the 3rd dependency.";
}
protected void btnKey0_Click(object sender, EventArgs e)
{
Cache["Depend0"] = "This is a changed first dependency.";
}
}
Table 17-5. Members of the CacheItemRemovedReason enumeration
Reason
Description
DependencyChanged
A file or item key dependency has changed.
Expired
The cached item has expired.
Removed
The cached item has been explicitly removed by the Remove method or replaced by another item with the same key.
Underused
The cached item was removed to free up system memory.
分享到:
相关推荐
### Cache性能分析实验知识点 #### 实验背景与目标 本实验旨在通过使用SimpleScalar模拟器对Cache性能进行深入分析,以此来加深对Cache基础知识、结构及其工作原理的理解。此外,还将探讨并量化Cache的主要参数...
JetCache是阿里巴巴开源的一款高性能、轻量级的分布式缓存框架,适用于微服务架构中的缓存场景。本文将详细介绍如何在SpringBoot项目中整合JetCache,并探讨其本地缓存和Redis缓存的使用,以及如何实现多缓存的并行...
Oracle数据库中的Buffer Cache和一般的Cache概念虽然相似,但它们在具体应用中有着不同的侧重点。首先,我们需要理解Buffer Cache的基本概念。在Oracle数据库系统中,Buffer Cache是内存结构的一部分,它存储了最近...
Java连接Cache数据库主要涉及到的是如何使用Java编程语言与Intersystems Cache数据库进行交互。Intersystems Cache是一款高性能、面向对象的数据库系统,广泛应用于医疗、金融等领域的复杂数据管理。在Java环境中,...
《PrimoCache重置工具详解及应用》 PrimoCache是一款高效、实用的硬盘缓存软件,它通过在系统内存中创建虚拟缓存,显著提升硬盘读写性能,从而优化系统运行速度。然而,如同大多数试用软件一样,PrimoCache在一定...
【Cache性能分析实验报告】 本实验旨在深入理解Cache的基本概念、结构和工作原理,通过实际操作分析Cache的容量、相联度和块大小对性能的影响,以及不同替换算法的效果。实验采用Vmware虚拟机上的Redhat 9.0 Linux...
该工程包含数据缓存D_Cache和指令缓存I_Cache的Verilog代码和仿真文件,Cache的详细技术参数包含在.v文件的注释中。 直接相连16KB D_Cache Cache写策略: 写回法+写分配 (二路)组相连16KB I_Cache Cache替换策略: ...
TI-6678 DSP多核编程中的Cache技术是一个复杂而重要的议题,尤其在多核处理环境下。Cache是计算机架构中用于减少处理器访问内存所需平均时间的一个高速数据存储区域。它作为处理器和主存储器之间的临时缓存,能够极...
### 分块矩阵优化Cache:深度解析与应用策略 #### 核心知识点概览: 1. **Cache基础原理**:理解高速缓存(Cache)在现代计算机系统中的关键作用及其内部结构,包括标记存储器和数据存储器的功能。 2. **Cache失效...
### Cache的工作原理详解 #### 一、引言 在现代计算机体系结构中,为了提高处理器访问数据的速度,引入了多种缓存技术。其中,Cache作为连接CPU与主存的重要环节,其工作原理对于理解计算机系统性能至关重要。本文...
在本“计算机体系结构cache实验报告”中,我们主要探讨了Cache存储过程的模拟和性能分析,重点关注了不同因素如关联方式、Cache容量、关联度和块大小对Cache性能的影响。实验采用控制变量法,通过操作系统试验中的...
《PrimoCache v3.09:硬盘缓存利器的深度解析》 PrimoCache,一个在IT领域中被广泛使用的高效硬盘缓存工具,其最新版本v3.09,为用户带来了更为优化的存储性能提升。这款软件的核心功能在于通过在内存中创建临时...
赠送jar包:cache-api-1.1.1.jar; 赠送原API文档:cache-api-1.1.1-javadoc.jar; 赠送源代码:cache-api-1.1.1-sources.jar; 赠送Maven依赖信息文件:cache-api-1.1.1.pom; 包含翻译后的API文档:cache-api-...
在计算机系统中,Cache是一种高速数据存储部件,用于暂时存储CPU频繁访问的内存数据,以减少主内存与CPU之间的数据传输延迟,提高系统的整体性能。本文将深入探讨基于AXI4(Advanced eXtensible Interface)总线协议...
全相联Cache( Fully-Associative Cache)是Cache组织方式的一种,与直接映射Cache和组相联Cache不同,它的每一个块都可以映射到Cache的任何一个位置上,这提供了更大的灵活性,但也带来了更高的复杂性。 全相联...
标题"jdbc连接cache的demo及jar包,自己备份.rar"指出这是一个关于使用JDBC(Java Database Connectivity)连接Cache数据库的示例项目,其中包含了必要的jar包,并且用户已经将其作为个人备份保存。这里的“Cache”...
Guava Cache是Google Guava库中的一个强大特性,它提供了高效的本地缓存解决方案,用于存储经常访问的数据,以减少对远程服务或计算的调用,从而提高应用性能。本案例代码将详细介绍Guava Cache的使用,包括缓存的...
《Nginx Cache Purge:高效管理Web缓存的利器》 在当今互联网环境中,Web服务器的性能优化至关重要,而缓存技术则是其中的关键一环。Nginx,以其高性能、稳定性以及模块化的特性,成为了许多网站首选的反向代理和...
然而,DMA和Cache之间存在一致性问题,特别是在某些嵌入式平台上,DMA操作可能会绕过Cache,导致数据不一致,这就需要通过一系列策略来确保Cache一致性。 在DMA机制中,有两类主要的Cache一致性问题:流式DMA...
计算机组成原理实验指导书中的“实验3 直接相联Cache设计”着重讲解了Cache的基础知识,特别是直接相联Cache的结构、设计方法以及其实现。以下是对实验内容的详细阐述: 1. **直接相联Cache的基本结构**: - **...