缓存(销毁)依赖

1:缓存依赖的类别
      文件,数据表,数据行,一段时间,控件,查询字符串等
2:缓存项之间的依赖
None.gifprotected void Button3_Click(object sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    
// create item A and item B
InBlock.gif
    string itemA = "ItemA";
InBlock.gif    
string itemB = "ItemB";
InBlock.gif    Cache.Insert(
"ItemA", itemA, null, DateTime.Now.AddMinutes(10), 
InBlock.gif    TimeSpan.Zero,
InBlock.gif    CacheItemPriority.Default, MyItemRemovedCallBack);
InBlock.gif    Cache.Insert(
"ItemB", itemB, null, DateTime.Now.AddMinutes(10), 
InBlock.gif    TimeSpan.Zero,
InBlock.gif    CacheItemPriority.Default, MyItemRemovedCallBack);
ExpandedBlockEnd.gif}

None.gif
None.gif
None.gif
private void MyItemRemovedCallBack(string key, object value,
None.gif                   CacheItemRemovedReason reason)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    
// remove the item from the cache
InBlock.gif
    if (key == "ItemA" ) Cache.Remove("ItemB");
InBlock.gif    
else if (key.Equals == "ItemB") Cache.Remove("ItemB");
ExpandedBlockEnd.gif}

None.gif
以上代码中
Key:缓存集合中唯一确认一项的键
Value:保存在缓存中的值
Reason:是"CacheItemRemovedReason"的一个枚举.说明缓存项被移出的原因
我们也可以手动移出缓存
None.gifCache.Remove("ItemA");
3: 缓存依赖于文件
None.gif<?xml version="1.0" encoding="utf-8"?>
None.gif
<MenuItems>
None.gif    
<MenuItem>
None.gif        
<Text>Home</Text>
None.gif    
</MenuItem>
None.gif    
<MenuItem>
None.gif        
<Text>About us</Text>
None.gif    
</MenuItem>
None.gif    
<MenuItem>
None.gif        
<Text>Contact us</Text>
None.gif    
</MenuItem>
None.gif    
<MenuItem>
None.gif        
<Text>Help</Text>
None.gif    
</MenuItem>
None.gif    
<MenuItem>
None.gif        
<Text>Feature</Text>
None.gif    
</MenuItem>
None.gif
</MenuItems>
None.gif
None.gif
None.gif
None.gif    
string menuPath = "MyFiles/Menu.xml";
None.gif    
string folderName = "MyFiles/";
None.gif
None.gif    DataSet ds 
= null;
None.gif    
if (Cache["Menu"== null)
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif        ds 
= new DataSet();
InBlock.gif        ds.ReadXml(Server.MapPath(menuPath));
InBlock.gif
InBlock.gif        
// menu is created
InBlock.gif
        Cache.Insert("Menu", ds, new System.Web.Caching.CacheDependency(
InBlock.gif            Server.MapPath(menuPath)),DateTime.Now.AddMinutes(
60),
InBlock.gif            TimeSpan.Zero,
InBlock.gif            System.Web.Caching.CacheItemPriority.Default,
InBlock.gif            
new System.Web.Caching.CacheItemRemovedCallback(
InBlock.gif                                  CacheItemRemovedCallBack));
InBlock.gif
InBlock.gif       DisplayCacheCreationTime(
"Object was not in the cache and created at:",
InBlock.gif             DateTime.Now.ToLongTimeString());
ExpandedBlockEnd.gif    }

None.gif    
else
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif        
// menu is created from the cache
InBlock.gif
        DisplayCacheCreationTime("Object was in the cache",String.Empty);
ExpandedBlockEnd.gif    }

None.gif
我们也可以将缓存依赖于文件夹.当文件夹下的文件和子级文件夹被创建,更新,删除的时候跟新缓存.
4:数据库中的缓存依赖
None.gif<connectionStrings>
None.gif    
<add name="ConnectionString"
None.gif         connectionString
="Server=localhost;Database=School;
None.gif
Trusted_Connection=true"/>
None.gif
</connectionStrings>
None.gif
None.gif
<system.web>
None.gif    
<caching>
None.gif        
<sqlCacheDependency pollTime="10000" enabled="true" >
None.gif            
<databases>
None.gif                
<add connectionStringName="ConnectionString" name="School"/>
None.gif            
</databases>
None.gif        
</sqlCacheDependency>
None.gif    
</caching></caching>
None.gif
None.gif
None.gif    
if (Cache["Users"== null)
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif        
// Create the cache dependency
InBlock.gif
        SqlCacheDependency dep = new SqlCacheDependency("School""Users");
InBlock.gif        
string connectionString = ConfigurationManager.ConnectionStrings[
InBlock.gif                                        
"ConnectionString"].ConnectionString;
InBlock.gif        SqlConnection myConnection 
= new SqlConnection(connectionString);
InBlock.gif        SqlDataAdapter ad 
= new SqlDataAdapter("SELECT FirstName, LastName " +
InBlock.gif                                               
"FROM Users", myConnection);
InBlock.gif        DataSet ds 
= new DataSet();
InBlock.gif        ad.Fill(ds);
InBlock.gif
InBlock.gif        
// put in the cache object
InBlock.gif
        Cache.Insert("Users", ds, dep);
ExpandedBlockEnd.gif    }

None.gif
None.gif    gvUsers.DataSource 
= Cache["Users"as DataSet;
None.gif    gvUsers.DataBind();
None.gif
None.gif
SqlCacheDependency dep = new SqlCacheDependency("School", "Users"); 这句话用于创建一个与数据库School中表Users关联的缓存.当我们对Users进行INSERT, DELETE, UPDATE操作的时候缓存会被移出(Cache["Users"]==null ).
这部分代码适用于sql2000,在sql2005下没有这么麻烦.回头我们再讨论sql2005下的缓存.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值