C#简单的文件依赖缓存的使用

一,FileCache.aspx页面

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FileCache.aspx.cs" Inherits="WebApplication1.FileCache" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Label ID="Label1" runat="server" />
        </div>
    </form>
</body>
</html>

二,FileCache.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml.Linq;

namespace WebApplication1
{
    public partial class FileCache : System.Web.UI.Page
    {
        /// <summary>
        /// 获取当前应用程序指定CacheKey的Cache对象值
        /// </summary>
        /// <param name="cacheKey">索引键值</param>
        /// <returns>返回缓存对象</returns>
        public static object GetCache(string cacheKey)
        {
            System.Web.Caching.Cache objCache = HttpRuntime.Cache;
            return objCache[cacheKey];
        }

        /// <summary>
        /// 设置以缓存依赖的方式缓存数据
        /// </summary>
        /// <param name="cacheKey">索引键值</param>
        /// <param name="objObject">缓存对象</param>
        /// <param name="dep"></param>
        public static void SetCache(string cacheKey, object objObject, System.Web.Caching.CacheDependency caDep)
        {
            System.Web.Caching.Cache objCache = HttpRuntime.Cache;
            objCache.Insert(
                cacheKey,
                objObject,
                caDep,
                System.Web.Caching.Cache.NoAbsoluteExpiration, //从不过期
                System.Web.Caching.Cache.NoSlidingExpiration, //禁用可调过期
                System.Web.Caching.CacheItemPriority.Default,
                null);
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            Dictionary<string, string> dic = new Dictionary<string, string>();
            string CacheKey = "CacheKey";
            Dictionary<string, string> objModel = GetCache(CacheKey) as Dictionary<string, string>;//从缓存中获取
            if (objModel == null) //缓存里没有
            {
                string path = Server.MapPath("SX.xml");    //读取服务器路径下的XML文件,生成Dictionary储存到缓存,并依赖这个文件
                XElement root = XElement.Load(path);

                foreach (var item in root.Elements("Settings").Elements("row"))
                {
                    var xAttribute = item.Attribute("Name");
                    if (xAttribute != null && !dic.ContainsKey(xAttribute.Value))
                    {
                        dic.Add(xAttribute.Value, item.Attribute("Value").Value);
                    }
                }
                System.Web.Caching.CacheDependency dep = new System.Web.Caching.CacheDependency(path);
                SetCache(CacheKey, dic, dep);//写入缓存,并依赖SX.xml文件

            }
            objModel = GetCache(CacheKey) as Dictionary<string, string>;
            if (objModel != null) Label1.Text = objModel["V"];      //当更改服务器的SX.xml的Name=V的value时,缓存会自动更新值
        }
    }
}

三,服务器下的SX.xml

<?xml version="1.0" encoding="utf-8"?>
<root>
  <Settings>
    <row Name="V" Value="13"></row>
    <row Name="V1" Value="11"></row>
    <row Name="V2" Value="12"></row>
  </Settings>
</root>

设计思路是:将XML文件读取,储存到Dictionary<string,string>中,并同时将这个Dictionary储存到缓存并依赖XML文件,当XML文件发生变化是,缓存会自动更新改变的值

时间: 2024-10-02 07:39:04

C#简单的文件依赖缓存的使用的相关文章

。net 文件依赖缓存

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class Default2 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { str

文件依赖缓存

原文地址:http://blog.51cto.com/11871779/2092427

MVC缓存依赖:文件依赖

<1>所谓缓存依赖,文件依赖就是指,我不我没有设置缓存的过期时间,当缓存依赖的文件内容发生改变的时候,就通知framework清空缓存.然后重数据库中取数据(或者文件中取数据)然后又把取到是数据缓存起来,用户请求的时候,直接从缓存中取数据,如果缓存依赖的文件内容又发生改变,就又清空,周而复始.. using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We

ASP.NET MVC 实现与SQLSERVER的依赖缓存

本文主要是为了了解ASP.NET MVC 实现与SQLSERVER的依赖缓存的功能,针对自己对于这方面知识的学习的过程的一个记录.由于本人也是初次了解这个知识点,有哪些错误,还望高手不吝赐教哦.好,下面正式进入话题. 1.测试的环境及工具: vs2012 sqlserver2008r2 2.测试目的:当数据库的值有变化时候,页面的缓存也会及时更新. 具体步骤: 1.在VS2012中新建一个ASP.NET MVC 的空的项目. 2.新建一个HomeController ,并创建Index试图.代码

ASP.NET MVC 数据库依赖缓存的实现

当数据库中的信息发生变化的时候,应用程序能够获取变化的通知是缓存依赖得以实现的基础.应用程序可以通过轮询获取数据变化的信息,使用轮询的话也不可能重新查一次后再和以前的数据做比较,如果这样的话如果我一个表里面有1000行数据我要是读100次的话是不是得比较1000 x 100 次,显然这种方法是不可行的,那怎么办呢?大家都学过触发器吧,实现数据库依赖缓存的轮询机制就是通过触发器来实现的. 实现步骤简单分析:     首先创建一个用于记录监控信息的表,表的字段就两个一个是表名,一个是版本号.然后,对

Makefile一个cpp文件依赖于多个header文件的陷阱

我一直以为,如果一个A.cpp文件中有多少条 #include "xxx.h"指令,在写Makefile的时候A.obj的依赖项除了A.cpp之外,就是A.cpp之内所有的 xxx.h 比如,如果A.cpp中有 #include "A.h" #include "B.h" #include "C.h",那么在Makefile中就有:A.obj: A.cpp A.h B.h C.h 但是 下面的例子是说明了,上面的想法是错误的 先

.net缓存——基于文件的缓存

一,.Net中的缓存基础知识 .net中支持的两种依赖: CacheDependency SqlDependency 表示对于文件或者目录的依赖 表示对于SQL数据库的依赖 过期时间 绝对过期时间 滑动过期时间 一个特定的时间点,类型为DateTime 一个时间间隔,类型为TimeSpan 优先级  :   CacheItemPriority 由于我们需要缓存大量的数据,在内存有限的情况下,就必须对缓存的数据进行优先级分类,以便在需要的时候,将不重要的数据从缓存中移除.优先级用来指定缓存数据的重

Makefile自动生成头文件依赖

前言 Makefile自动生成头文件依赖是很常用的功能,本文的目的是想尽量详细说明其中的原理和过程. Makefile模板 首先给出一个本人在小项目中常用的Makefile模板,支持自动生成头文件依赖. CC = gcc CFLAGS = -Wall -O INCLUDEFLAGS = LDFLAGS = OBJS = seq.o TARGETS = test_seq .PHONY:all all : $(TARGETS) test_seq:test_seq.o $(OBJS) $(CC) -o

jfinal初接触,一个简单的文件上传例子

写了个上传的小例子. 从jfinal官网下载jfinal-1.8_demo_for_jsp.zip 然后下载jfinal-1.8-lib.zip 按要求删掉该删除的,引入一些包,之后的项目结构: DemoConfig.java中配置路由,只留下了根路径: /** * 配置路由 */ public void configRoute(Routes me) { me.add("/", CommonController.class); //me.add("/blog", B