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,随便修改一点东西,然后保存,再次刷新页面,显示内容变了,说明缓存过期,重新写入新缓存,再次刷新,页面内容不变,说明缓存未过期。

时间: 2024-08-01 03:27:35

Enterprise Library 4.1学习笔记8----缓存应用程序块之FileDependency的相关文章

Enterprise Library 4.1学习笔记1----配置应用程序块(c/s和b/s均适用)

园子里TerryLee的Enterprise Library系列文章回顾与总结 http://www.cnblogs.com/Terrylee/archive/2006/08/01/464591.html已经写得很全面了,不过不是针对4.1版,一边看这一系列的文章学习,一边在4.1上摸索,准备写几篇学习笔记,今天先来认识Configuration Application Block(配置应用程序块) 参照TerryLee的文章,在4.1上怎么也找不到Configuration Applicati

Enterprise Library 4.1学习笔记3----安全应用程序块

打开\EntLib41Src\Quick Starts\Security\CS 先用aspnet_regsql.exe配置一个membership/role的基本数据库,然后修改下config文件中的连接字符串 运行后会发现界面上有一段文字 Note: Much of the functionality demonstated by this QuickStart was implemented in previous versions of Enterprise Library, but th

Enterprise Library 4.1学习笔记5----实体验证程序块

实体验证的作用简单来讲,就是从服务端对数据进行验证.(特别是对数据安全性要求比较高的应用,这是十分必要的) 废话不说了,直接讲下使用步骤:(因为我是做web开发的,主要是讲解asp.net环境中的使用) 1.先添加Microsoft.Practices.EnterpriseLibrary.Validation.dll的引用 2.最基本的使用方法(也是我最不喜欢的一种方式),直接在实体类上通过添加特性实现 实体类如下: public class Person{            [String

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

缓存是个啥?以及为啥要用缓存就不废话了,主要是从实用角度讲下怎么用 1.先添加对Microsoft.Practices.EnterpriseLibrary.Caching.dll的引用 2.修改web.config文件,注意高度部分 <configSections>    ...    <section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Cachin

Enterprise Library 4.1学习笔记6----加密应用程序块

学习这一块内容前,先得大概知道"哈希算法"和"对称加密算法"是咋回事儿. 不清楚的先去这里充电5分钟再回来 哈希算法------http://baike.baidu.com/view/273836.htm 对称加密算法--http://baike.baidu.com/view/7591.htm 使用步骤: 1.先添加Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.dll的引用 2.参照http:

Enterprise Library 4.1学习笔记2----数据访问程序块

Data Access Application Block 其实个人感觉相当于另一个版本的dbHelper 废话不多说,先看下如何使用: 1.引用Microsoft.Practices.EnterpriseLibrary.Data.dll(EL安装目录下的bin中就有) 2.配置web.config <configSections>...<section name="dataConfiguration" type="Microsoft.Practices.E

Enterprise Library 4.0缓存应用程序块

英文原文:http://msdn.microsoft.com/zh-cn/library/cc511588(en-us).aspx Enterprise Library 缓存应用程序块允许开发人员在应用程序中合并一个局部缓存,它支持内存内的缓存,和可选的可以是数据库存储或独立存储的后端存储.应用程序块可以不做修改的使用,它提供所有必须的获取.添加和移除缓存数据的功能.可配置的到期和清除策略也是应用程序块的一部分. 在构建企业范围发布的应用程序时,架构和开发人员都要面对许多挑战,缓存可以帮助他们战

Enterprise Library 4 缓存应用程序块的设计

缓存应用程序为以下目的而设计: 提供一个大小可管理的 API 集合. 允许开发人员添加标准的缓存操作到他们的应用程序中,而不用学习应用程序块的内部工作. 用 Enterprise Library 配置控制台来简化配置. 有效率的执行. 线程安全.某些东西在被多个程序线程调用而没有属于那些线程的不必要的交互时,它被视为是线程安全的. 如果在访问后端存储时发生异常,确保后端存储依然是完整的. 保存内存缓存的状态与后端存储保持同步. 设计亮点 图 1 说明了缓存应用程序块中关键类的相互关系.   当使

Enterprise Library 2.0 Hands On Lab 翻译(11):缓存应用程序块(三)

练习3:实现后台缓存 该练习将示范如何实现后台加载. 第一步 打开EmployeeBrowser.sln 项目,默认的安装路径应该为C:\Program Files\Microsoft Enterprise Library January 2006\labs\cs\Caching\exercises\ex03\begin,并编译. 第二步 实现后台加载 1.在解决方案管理器中选择EmployeeServices.cs文件,选择View | Code菜单命令,添加如下两个方法,它们将实现在后台加载