_________________________________________________________________________

其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正)

汇总:http://www.cnblogs.com/dunitian/p/4822808.html#mvc

本章Demo:https://github.com/dunitian/LoTCodeBase/blob/master/NetCode/6.网页基础/BMVC5/MVC5Base/Controllers/CacheController.cs

这次来篇放松的,咱们不要老是说安全相关的东西。缓存这东西并不是MVC独有的,N年前就有了,简单介绍一下平时项目里面使用的(Redis,Memcache等下次说)

1.页面缓存:

先说最常见的的一种:[OutputCache(Duration = 100)] ,Duration单位是秒

第一次回到了断点的地方,100秒内任意刷新都不会再执行控制器里面的A()了

带参数缓存

[OutputCache(Duration = 100, VaryByParam = "id")] [OutputCache(Duration = 100, VaryByParam = "id;name")]

第一次访问cache/b?id=1的时候断点停下了,100s内不会进入断点了。当id=2的时候又重新进入了断点。多参数类似,注意一下参数分割是;

---------------------------------------------------------------------------------------------------

2.二级缓存:(System.Web;System.Web.Caching;)

2.1绝对过期缓存

HttpRuntime.Cache.Add(key, list, null, DateTime.Now.AddSeconds(60), Cache.NoSlidingExpiration, CacheItemPriority.Default, null); 

2.2相对过期缓存(有点Session的感觉了)

HttpRuntime.Cache.Add(key, list, null, Cache.NoAbsoluteExpiration, new TimeSpan(0, 0, 10), CacheItemPriority.Default, null);

2.3数据库依赖缓存

1.启动一下数据库缓存依赖:管理员身份打开VS开发人员命令(参数详解:https://msdn.microsoft.com/zh-cn/library/ms229862

aspnet_regsql -C "data source=xxx;initial catalog=xxx;uid=xxx;password=xxx;" -ed -et -t "表名"

没有装VS的可以用管理员打开cmd,然后切换到以下目录:(v4.0.xxx有可能不一样)

C:\Windows\Microsoft.NET\Framework\v4.0.30319

C:\Windows\Microsoft.NET\Framework64\v4.0.30319

其实可以看到,他的内部实现是通过触发器来的,所以不见得有多么高效:

2.配置WebConfig:

1
2
3
4
5
6
7
8
9
10
<!--数据库缓存依赖配置 Start-->
    <caching>
      <!--pollTime,毫秒为单位,意识是每隔10秒检测下数据库,检测表是否有发生变化-->
      <sqlCacheDependency pollTime="10000">
        <databases>
          <add name="MySQLCacheDB" connectionStringName="cacheConn"/>
        </databases>
      </sqlCacheDependency>
    </caching>
<!--数据库缓存依赖配置 End-->

Code:HttpRuntime.Cache.Add(key, list, new SqlCacheDependency("SQLCacheDB", "SeoTKD"), Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Default, null);

应用场景一般都是缓存数据库依赖表里面的数据,当里面数据发生改变则缓存失效,这样就可以及时自动更新缓存了(我这边只是做个演示)

数据没有更新之前:

往死里刷新都没有更新

表更新之后:

其他:文件(夹)依赖缓存,一般也就一些网站固定配置用它,一般是根据文件最后一次修改时间来判断时间差

简单举个例子:

HttpRuntime.Cache.Add(key, list, new CacheDependency(Request.MapPath("/App_Data/Config.xml")), Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Default, null);

改变内容:

课外拓展:http://www.cnblogs.com/knowledgesea/p/3904929.html

 ——————————————————————————————————————————————————————————————————
 

ASP.NET MVC中使用OutputCache实现服务器端页面级缓存注意问题

2015年04月26日 11:34:42 Harper 阅读数 4314更多

分类专栏: Asp.net
 
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

CSDN广告是越来越多了,所有博客笔记不再更新,新网址 DotNet笔记

1)

输出缓存的msdn介绍:OutputCache

血的教训:先说使用OutputCache实现服务器端页面级缓存注意问题

在ASP.NET MVC中,假如我们想要将某个页面(即某个Action)缓存在服务器端,可以在Action上标上以下特性:

  1. [OutputCache(Duration = 300,Location = OutputCacheLocation.Server)]
  2. [HttpGet]
  3. public ActionResult Index()
  4. {
  5. return View();
  6. }

上面代码的意思是 只允许get请求,并把index缓存在服务器上面300秒

注意问题:

1、Action必须是[HttpGet]。

2、Web.Config中设置<compilation debug="false">,即应用程序的编译条件不能是Debug。【发布后,默认为false,咱们不用处理】

3、页面响应Response中不能有Cookies。就是说,当前action和视图中,不能有写、删cookie的操作。   【都是泪】

2)

既然可以"输出缓存",那么我们在特需的情况下,就有必要清除输出缓存,清除缓存很简单,一句代码: 

HttpResponse.RemoveOutputCacheItem(url);

参数是清除指定url的缓存  比如:清除首页的缓存  HttpResponse.RemoveOutputCacheItem("/home/index"); 就行了

 
 

最新文章

  1. 2019年台积电进军AR芯片,将用于下一代iPhone
  2. Oracle Linux 5.7安装VMware Tools的问题
  3. using 释放资源
  4. ajax批删
  5. [译]Node.js - Event Loop
  6. Android中使用Gson解析JSON数据的两种方法
  7. 为Debug和Release分别设置Web.config
  8. lightOJ 1326 Race(第二类Stirling数)
  9. Java IO之序列化
  10. C#中foreach语句的迭代器实现机制
  11. Javascript数据结构与算法--队列(顺序队列、优先队列、循环队列)的实现与用法
  12. 2018年度最优秀mac软件及游戏推荐,个个万里挑一
  13. 第二个web网页
  14. Sqlite之事务
  15. sql server 查看锁表SQL【转】
  16. Ngnix日志分析
  17. 记dynamic的一个小坑 -- RuntimeBinderException:&ldquo;object&rdquo;未包含&ldquo;xxx&rdquo;的定义
  18. 2017年Android百大框架排行榜
  19. ats 转发代理
  20. DIV布局之position详解

热门文章

  1. Mysql数据库 深度知识点
  2. ajax请求体
  3. angular6 监听url查询参数变化刷新页面
  4. IntelliJ idea SpringBoot打war包
  5. 《linux就该这么学》课堂笔记08 用户权限、特殊权限、隐藏权限、su、sudo
  6. OpenLDAP 常用命令
  7. Activiti6 查询由某人发起的流程请求 设置流程发起人
  8. Makefile 中各种函数列举(进行 ing)
  9. 在eclipse中安装使用lombok插件
  10. DB2数据库