zoukankan      html  css  js  c++  java
  • 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 { setget; }       
    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,随便修改一点东西,然后保存,再次刷新页面,显示内容变了,说明缓存过期,重新写入新缓存,再次刷新,页面内容不变,说明缓存未过期。

    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Pandas中dataframe以及spark中rdd使用groupByKey进行合并
    Apriori算法Python实现
    安装Cloudera CDH
    HDFS常用命令
    vuex modules 命名空间
    sessionStore使用
    indexof使用
    vue 简单购物车实现
    etCapture() 和 ReleaseCapture()的用法
    js组合继承与寄生继承
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/1503107.html
Copyright © 2011-2022 走看看