Enterprise Library 4.1学习笔记8----缓存应用程序块之FileDependency

写入缓存数据时如果使用了FileDependency方式,最终的效果会让缓存是否过期依赖于某一个具体的文件,只要这个文件没有修改,缓存一直

有效,反之如果这个文件被修改过了,则缓存立即过期。


个人认为,这种方式特别适合一些极少修改的数据(比如系统中的数据字典),而且相对用绝对时间(或是时间周期)让缓存过期,更能减轻数据

库压力,毕竟如果用时间做判断,时间点一到,就得重新从数据库里查询数据(不管数据有没有被修改)。


应用场合:某些基础数据几乎极少修改,可能一个月还改不到一回,这时我们可以考虑FileDependency,数据修改后,只要想办法把依赖的文件内容随便改一下就Ok了(人工修改或代码修改某个文件内容都很方便实现)


示例代码:

 1  using  System;
 2  using  System.Collections.Generic;
 3  using  Microsoft.Practices.EnterpriseLibrary.Caching;
 4  using  Microsoft.Practices.EnterpriseLibrary.Caching.Expirations;
 5 
 6 
 7  namespace  CacheTest
 8  {
 9 
10       ///   <summary>
11       ///  定义要缓存的实体类
12       ///   </summary>
13       public   class  Test
14      {
15           public   string  DateTime {  set get ; }       
16      }
17 
18 
19       public   partial   class  _Default : System.Web.UI.Page
20      {
21           const   string  KEYNAME  =   " myDate " ; // 缓存的键值
22 
23          ICacheManager cacheManager;
24 
25           protected   void  Page_Load( object  sender, EventArgs e)
26          {
27               if  ( ! IsPostBack)
28              {
29                  cacheManager  =  CacheFactory.GetCacheManager(); // 实例化ICachemanager
30                   this .R1.DataSource  =  GetCacheData();
31                   this .R1.DataBind();
32              }
33          }
34 
35         
36 
37           ///   <summary>
38           ///  获取缓存数据
39           ///   </summary>
40           ///   <returns></returns>
41           public  List < Test >  GetCacheData()
42          {
43              List < Test >  _cacheData  =  cacheManager.GetData(KEYNAME)  as  List < Test > ;
44 
45               if  ( null   ==  _cacheData) // 记得一定要加此判断(因为缓存可能过期)
46              {
47                   // 如果缓存数据为空,则重新生成数据,并加入缓存
48                  _cacheData  =   new  List < Test >
49                       new  Test(){DateTime = DateTime.Now.ToString( " yyyyMMddhhmmssffff " )}            
50                  };
51                  FileDependency _fileDep  =   new  FileDependency( " R:\\1.txt " ); // 指定缓存依赖于某一文件
52                  cacheManager.Add(KEYNAME, _cacheData, CacheItemPriority.Normal,  null , _fileDep);
53              }
54 
55               return  _cacheData;
56          }
57 
58      }
59  }
60 

 

前台aspx页:

 

<%@ 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:Repeater ID="R1" runat="server" EnableViewState="false">
        <HeaderTemplate>
            <ul>
        </HeaderTemplate>
        <ItemTemplate>
            <li><%# Eval("DateTime") %></li>
        </ItemTemplate>
        <FooterTemplate>
            </ul>
        </FooterTemplate>
    </asp:Repeater>
    </form>

</body>
</html>

 

测试方法:
打开页面,会显示一串数字,刷新后仍然不变(说明已经缓存了)。
然后打开r:\1.txt,随便修改一点东西,然后保存,再次刷新页面,显示内容变了,说明缓存过期,重新写入新缓存,再次刷新,页面内容不变,说明缓存未过期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值