Enterprise Library 4.1学习笔记4----缓存应用程序块

缓存是个啥?以及为啥要用缓存就不废话了,主要是从实用角度讲下怎么用

1.先添加对Microsoft.Practices.EnterpriseLibrary.Caching.dll的引用

2.修改web.config文件,注意高度部分

<configSections>
    ...
    <section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings, Microsoft.Practices.EnterpriseLibrary.Caching, Version=4.1.0.0, Culture=neutral" />
 ...

</configSections>
  <cachingConfiguration defaultCacheManager="Cache Manager">
    <cacheManagers>
      <add expirationPollFrequencyInSeconds="60" maximumElementsInCacheBeforeScavenging="1000"
        numberToRemoveWhenScavenging="10" backingStoreName="Null Storage"
        type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=4.1.0.0, Culture=neutral"
        name="Cache Manager" />
    </cacheManagers>
    <backingStores>
      <add encryptionProviderName="" type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=4.1.0.0, Culture=neutral"
        name="Null Storage" />
    </backingStores>
  </cachingConfiguration>
...

3.使用缓存,见下面的代码,关键地方都加了注释

using  System;
using  System.Collections.Generic;
using  Microsoft.Practices.EnterpriseLibrary.Caching;
using  Microsoft.Practices.EnterpriseLibrary.Caching.Expirations;

namespace  CacheTest
{
    
///   <summary>
    
///  定义要缓存的实体类
    
///   </summary>
     public   class  MyData
    {
        
public   string  Name {  set get ; }
        
public   int  Age {  set get ; }
        
public   string  Color {  set get ; }
    }

    
public   partial   class  _Default : System.Web.UI.Page
    {
        
const   string  KEYNAME  =   " myDate " ; // 缓存的键值

        ICacheManager cacheManager;

        
protected   void  Page_Load( object  sender, EventArgs e)
        {
            cacheManager 
=  CacheFactory.GetCacheManager(); // 实例化ICachemanager
        }

        
protected   void  btnWrite_Click( object  sender, EventArgs e)
        {
            
// 生成要缓存的数据(实际开发中可以是从数据库查询出来的数据)
            List < MyData >  _list  =   new  List < MyData >
                
new  MyData(){ Age = 1 , Color = " Yellow " , Name = " China " },
                
new  MyData{ Age = 2 ,Color = " Black " ,Name = " USA " }
            };

            AbsoluteTime _ExpireTime 
=   new  AbsoluteTime(DateTime.Now.AddSeconds( 30 )); // 指定30秒后过期

            cacheManager.Add(KEYNAME, _list, CacheItemPriority.Normal, 
null , _ExpireTime); // 加入缓存


            Response.Write(
" Cache写入完成, "   +  DateTime.Now.ToString());
        }

        
protected   void  btnRead_Click( object  sender, EventArgs e)
        {

            
this .R1.DataSource  =  GetCacheData();
            
this .R1.DataBind();
            Response.Write(
" Cache加载完成, "   +  DateTime.Now.ToString());

        }

        
///   <summary>
        
///  获取缓存数据
        
///   </summary>
        
///   <returns></returns>
         public  List < MyData >  GetCacheData()
        {
            List
< MyData >  _cacheData  =  cacheManager.GetData(KEYNAME)  as  List < MyData > ;

            
if  ( null   ==  _cacheData) // 记得一定要加此判断(因为缓存可能过期)
            {
                
// 如果缓存数据为空,则重新生成数据,并加入缓存(为检测效果,特地把Color与Name前加了一个"New")
                _cacheData  =   new  List < MyData >
                
new  MyData(){ Age = 1 , Color = " New Yellow " , Name = " New China " },
                
new  MyData{ Age = 2 ,Color = " New Black " ,Name = " New USA " }
                };

                AbsoluteTime _ExpireTime 
=   new  AbsoluteTime(DateTime.Now.AddSeconds( 30 )); // 指定30秒后过期

                cacheManager.Add(KEYNAME, _cacheData, CacheItemPriority.Normal, 
null , _ExpireTime);
            }

            
return  _cacheData;
        }



    }
}
前端页面很简单
<% @ Page Language = " C# "  AutoEventWireup = " true "  CodeBehind = " Default.aspx.cs "  Inherits = " CacheTest._Default "   %>

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head  runat ="server" >
    
< title ></ title >
</ head >
< body >
    
< form  id ="form1"  runat ="server" >
    
< asp:Button  ID ="btnWrite"  runat ="server"  Text ="Write Cache"  OnClick ="btnWrite_Click"   />
    
< asp:Button  ID ="btnRead"  runat ="server"  Text ="Load Cache"  
        onclick
="btnRead_Click"   />
    
< asp:Repeater  ID ="R1"  runat ="server"  EnableViewState ="false" >
        
< HeaderTemplate >
            
< ul >
        
</ HeaderTemplate >
        
< ItemTemplate >
            
< li > Age: <% Eval ( " Age " %> ,Name: <% Eval ( " Name " ) %> ,Color: <% Eval ( " Color " ) %> </ li >
        
</ ItemTemplate >
        
< FooterTemplate >
            
</ ul >
        
</ FooterTemplate >
    
</ asp:Repeater >
    
</ form >
</ body >
</ html >

值得一提的是,缓存是"全局"性质的,也就是说在一个页面写入了缓存,另一个页面也可以读取(当然:前提是缓存未过期的情况下),我们可以利用这个特性把网站中经常使用的数据(比如一些基础数据)缓存起来,其它要用的地方直接从缓存读取,能有效减少对数据库的访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值