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

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

目录
相关文章
|
8月前
|
缓存 Java 数据库
优化您的Spring应用程序:缓存注解的精要指南
优化您的Spring应用程序:缓存注解的精要指南
119 0
|
8月前
|
缓存 监控 中间件
中间件Cache-Aside策略应用程序直接与缓存和数据库进行交互
【5月更文挑战第8天】中间件Cache-Aside策略应用程序直接与缓存和数据库进行交互
91 4
|
8月前
|
存储 缓存 移动开发
HTML5 应用程序缓存
HTML5的离线缓存(Application Cache)允许网页存储资源以实现离线访问。通过manifest文件指定缓存内容和更新规则,比如列出要缓存的HTML、CSS、JS和图片。在HTML中引用manifest文件后,浏览器会根据文件变化更新缓存。但要注意,应用缓存不自动更新,需手动修改manifest触发,并且现代Web开发更多使用服务工作者(Service Workers)替代,以获得更优的离线体验和更新策略。
|
缓存 前端开发
前端学习笔记202306学习笔记第四十七天-vue-强制缓存3
前端学习笔记202306学习笔记第四十七天-vue-强制缓存3
80 0
|
8月前
|
缓存 NoSQL 关系型数据库
数据库缓存一致性学习笔记(一)
数据库缓存一致性学习笔记(一)
|
8月前
|
存储 缓存 前端开发
《Webpack5 核心原理与应用实践》学习笔记-> webpack5持久化缓存
《Webpack5 核心原理与应用实践》学习笔记-> webpack5持久化缓存
284 1
|
缓存 NoSQL 算法
Redis学习笔记-缓存容量和淘汰机制核心思想
Redis学习笔记-缓存容量和淘汰机制核心思想
152 0
|
消息中间件 缓存 NoSQL
Redis学习笔记-如何解决缓存和数据库的数据不一致
Redis学习笔记-如何解决缓存和数据库的数据不一致
204 0
|
缓存 NoSQL 数据库
Redis学习笔记-如何应对缓存雪崩、击穿、穿透
Redis学习笔记-如何应对缓存雪崩、击穿、穿透
66 0
|
缓存 前端开发
前端学习笔记202306学习笔记第四十七天-vue-强制缓存2
前端学习笔记202306学习笔记第四十七天-vue-强制缓存2
85 0