MVC缓存依赖:文件依赖

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Caching;
using System.Web.Mvc;

namespace Itcast.CMS.WebApp.Controllers
{
    public class CacheTestController : Controller
    {
        Itcast.CMS.Common.LogHelper log = new Common.LogHelper();//log4net日记类对象
        private static System.Web.Caching.Cache Cache = HttpRuntime.Cache;

        public ActionResult Index()
        {
            //如果可以为"fmsg"的缓存不存在,或为空,就去文件里取数据,否则就去缓存里取数据
            if (Cache["fmsg"] == null)
            {
                //缓存要依赖的文件的路径(我这里写的是绝对路径,也可以写虚拟路径,到时候给它转成物理路径就可以了)
                string filePath = System.IO.Path.GetFullPath(@"D:\企业管理系统\Itcast.CMS\Itcast.CMS.WebApp\Log\LogInfo\2015-05-06.TXT");

                //string filePath = Server.MapPath("~/master/wowo.txt");

                //这段代码无缓存依赖没有关系,这里仅仅是将上面那个路径的文件读出来而已(到时候用作缓存的值,当然你也可以设置别的值,这里仅仅是做是案例而已)
                string msg = System.IO.File.ReadAllText(filePath, System.Text.Encoding.Default);

                //创建一个缓存依赖对象(并用缓存依赖文件的服务器端的物理路径给它初始化。只要文件的内容改变,它就会通知framework清空缓存
                System.Web.Caching.CacheDependency cDep = new System.Web.Caching.CacheDependency(filePath);

                //第一个参数:缓存的键
                //第二个参数:缓存的值
                //第三个参数:缓存依赖的对象
                //第四个参数:缓存的绝对过期时间,从用户第一次请求开始计时(因为这里我们是使用的缓存依赖,所以这里使用NoAbsoluteExpiration,表示没有到期时间,即永不过期)
                //第五个参数:缓存的可调过期时间,从用户最后一次请求开始计时(因为这里我们是使用缓存依赖,所以这里使用NoSlidingExpiration,表示没有可调过期时间)
                //第六个参数:指定 System.Web.Caching.Cache 对象中存储的项的相对优先级。(它是一个枚举) Normal是默认值
                //第七个参数:缓存依赖的回调函数(缓存被清除或修改的时候调用此方法)
                //【其实第七个参数它是一个委托,既然它是一个委托,所以我们使用它的时候需要传递一个方法签名和这个委托签名一样的方法给它】
                //Cache.Insert()方法也可以用Cache.Add()方法替代,只是Cache.Add()方法的参数个数比较多,有时候我们不需要那么多参数的时候就使用Cache.Insert(),比较方便
                Cache.Insert("fmsg", msg, cDep, System.Web.Caching.Cache.NoAbsoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Normal, CacheCallBack);

                ViewData["msg"] = msg;
            }
            else
            {
                //如果key为“fmsg”的缓存存在数据,就将它赋值给ViewData["msg"]
                ViewData["msg"] = Cache["fmsg"].ToString();

            }
            return View();
        }

        /// <summary>
        /// 缓存依赖的回调函数(缓存被清除的时候调用此方法)
        /// </summary>
        /// <param name="key">缓存的键</param>
        /// <param name="value">缓存的值</param>
        /// <param name="reason">缓存被移除的原因</param>
        void CacheCallBack(string key, object value, CacheItemRemovedReason reason)
        {
            //是用logHelper对象来记录日记
            log.Info("在Home控制器下的Index方法中,Cache[" + key + "]=" + value.ToString() + "因为"+reason.ToString()+"被删除了");

        }

    }
}



时间: 2024-08-11 07:48:50

MVC缓存依赖:文件依赖的相关文章

c#依赖文件缓存

public void RemovedCallbackRole(string key, object value, CacheItemRemovedReason reason) { // 在应用程序启动时运行的代码 BLL.JUESE bll = new BLL.JUESE(); //显示当前时间,以便判断是否为缓存中页面 //缓存依赖于文件TextFile.txt //string fileDependencyPath = "F:\\View\\code\\cm1test\\Web\\Text

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&q

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 但是 下面的例子是说明了,上面的想法是错误的 先

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

关于c++的头文件依赖

关于c++的头文件依赖 正在看google c++编程规范,里面对头文件依赖是这么说的: 1 2 3 4 5 6 7 8 9 10 11 使用前置声明(forward declarations)尽量减少.h文件中#include的数量. 当一个头文件被包含的同时也引入了一项新的依赖(dependency),只要该头文件被修改,代码就要重新编译.如果你的头文件包含了其他头文件,这些头文件的任何改变也将导致那些包含了你的头文件的代码重新编译.因此,我们宁可尽量少包含头文件,尤其是那些包含在其他头文件

自动编译Makefile,原版升级版,支持自动推倒头文件依赖关系、创建目标路径

################################################################################### # 简易多模块程序自动编译/清除Makefile v2.0 #简介: 自动编译.清除功能,不需要每次编译输入gcc或者rm指令 #使用方法: 先配置Makefile中的配置项.目标名称等,然后在终端执行make即可 # #使用说明:1. 本Makefile可以自动推倒源程序与头文件之间的依赖关系,并生成.depend文件 # 2.

[转] 关于c++的头文件依赖

http://www.cnblogs.com/yvesliao/p/3938730.html PS: 使用单向依赖 正在看google c++编程规范,里面对头文件依赖是这么说的: 1 2 3 4 5 6 7 8 9 10 11 使用前置声明(forward declarations)尽量减少.h文件中#include的数量. 当 一个头文件被包含的同时也引入了一项新的依赖(dependency),只要该头文件被修改,代码就要重新编译.如果你的头文件包含了其他头文件,这些头 文件的任何改变也将导

MVC进阶之路:依赖注入(Di)和Ninject

MVC进阶之路:依赖注入(Di)和Ninject 0X1 什么是依赖注入 依赖注入(Dependency Injection),是这样一个过程:某客户类只依赖于服务类的一个接口,而不依赖于具体服务类,所以客户类只定义一个注入点.在程序运行过程中,客户类不直接实例化具体服务类实例,而是客户类的运行上下文环境或专门组件负责实例化服务类,然后将其注入到客户类中,保证客户类的正常运行. 图1 如图1所示,数据库操作类DataManager中依赖的IDataBase的接口,而不是以来IDataBase的具

make自动生成依赖文件的两种形式

最近编译源文件发现当修改头文件后,make并不会自动把包含此头文件的所有源文件重新编译,而每次都是需要把对应的中间文件清除才能重新编译,非常的麻烦.因此需要make自动对源文件所依赖的头文件进行管理,即make自动生成依赖文件.鉴于本人的刚开始写的博客,很多方面经验不足,比如如何介绍我所用到的知识等,现在只是对我在过程中遇到的问题进行记录,相关的知识可以查看gnu make中文文档,上网等等. 遇到的问题记录如下:1.make在生成依赖文件后并不正确:原因是生成的依赖文件中的目标文件(.d与.o