缓存依赖数据库

  第一步

1通过vs里面带的命令提示窗口。

2或者.NET Framework 版本 4(64 位系统)条件,%windir%\Microsoft.NET\Framework64\v4.0.30319目录下找到aspnet_regsql.exe, 执行下面cmd命令

aspnet_regsql -S .\LK -E  -ed -d CommunicationPlatformByLK -et -t UserInfor

-S 服务器,-E windows认证方式  -ed -d缓存的数据库  -et -t缓存的数据表。

如果你想查为起的缓存表起名,或者改变认证方式等要求,查一查。毕竟咱们做的是例子。

这样命令之后,在缓存的数据库中会建立一个数据表,具有触发功能。

            

  第二步

配置文件:注意第一个连接节点是EF帮我们生成的,用这个是不行的,第二个是我手动加上的,用这个才行。所以用ef或者其他的朋友注意这点。

<connectionStrings>
<add name="ModelContainer" connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=LIKE-PC\LK;initial catalog=CommunicationPlatformByLK;user id=sa;password=sa;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
<add name="CommunicationPlatformByLK" connectionString="data source=.\LK;Integrated Security=SSPI;
initial catalog=CommunicationPlatformByLK;" />
</connectionStrings>
system.web>
<caching>
<sqlCacheDependency enabled="true" >
<databases>
<add name="Test" connectionStringName="CommunicationPlatformByLK" pollTime="" />
            //name随便起,后面的connectStringName是新添加连接字符串的键名,500以ms为单位,采用的轮询机制,程勋每0.5s问检测数据库是否发上变化
</databases>
</sqlCacheDependency>
</caching>

  第三步

记得SqlDependency里面的值是,配置文件的值=name:起缓存的数据表名

 [OutputCache(Duration = 60, SqlDependency = "Test:UserInfor",Location=System.Web.UI.OutputCacheLocation.ServerAndClient)]
public ActionResult GetAllUserInfos()
{
int pageIndex = int.Parse(Request["page"]);
int pageSize = int.Parse(Request["rows"]);
int rowcount = 0;
IQueryable<UserInfor> pageEntityList = userInforService.SelectPageEntityList<int>(u => u.ID, u => u.ID > 0, pageIndex, pageSize, false, out rowcount);
var result = new { total = rowcount, rows = pageEntityList };
return Json(result, JsonRequestBehavior.AllowGet); }

注意:理解:既然有的polltime,为什么打的标签还有duration参数。

答案:在duration时间内,只要数据库表没有变化,会一直读取服务器缓存(不会执行action方法体),但是只要数据库发生变化,并且保证polltime已经到了,duration时间就不起作用了。

所以我们一般蛇者polltime很小,设置duration很长。

有人说duration没什么用,去掉不行吗?答案是不行的~~因为duration是必须的参数。虽然没什么主要用途。  

页面缓存

   注意1

    前台读取客户端缓存,用get,非post。因为get请求方式参数不变的情况下,默认会读取浏览器缓存。但post方式不会如此。

   注意2

    OutputCache的参数有默认值,location默认客户端和服务端都有,varyby..默认根据参数。

    VaryByHeader = "User-Agent"换浏览器读取数据库,VaryByParam = "a"随便定义一个参数,就防止随着参数值变化而变化。

   注意3

    google显示正确,读取客户端缓存,但是ie firefox并没有。但是服务器缓存都是正常读取的。

读取服务器缓存本质:(当第一次请求执行一个action,会执行里面的方法体,在duration时间内,多次请求这个action,不再执行里面的方法体,而直接从服务器端的缓存发来)

在controller或者action上面写上[OutputCache(Duration=20....)],因为controller有很多action,如果单在controller上面写,所有action都会建立对应的页面的缓存,并一定适用,所以一般用到哪一个action,就在上面打上此标签便可。

那实际开发中的项目写一个例子。

action

 1     [OutputCache(Duration = 60)]
2 public ActionResult GetAllUserInfos()
3 {
4 int pageIndex = int.Parse(Request["page"]);
5 int pageSize = int.Parse(Request["rows"]);
6 int rowcount = 0;
7 IQueryable<UserInfor> pageEntityList = userInforService.SelectPageEntityList<int>(u => u.ID, u => u.ID > 0, pageIndex, pageSize, false, out rowcount);
8 var result = new { total = rowcount, rows = pageEntityList };
9 return Json(result, JsonRequestBehavior.AllowGet);
10 }

前台easyui:注意一定是get方式,非post方式。因为get请求方式参数不变的情况下,默认会读取浏览器缓存。但post方式不会如此。

        function initGrid() {
$('#tt').datagrid({
url: '/UserInfor/GetAllUserInfos',
title: '演示表格使用',
width: 900,
method:'get',
height: 400,
         //*****省略

google

              

google response

                   

IE

        

IE response

        

IE 响应正文

      

google显示304而ie显示200,其余cache-control 都有max-age(服务器的剩余缓存时间),都有从数据库的缓存中返回数据。

确定的是,ie和google都在duration时间内,action的代码不会被执行。google返回304,读取了客户端缓存,但是服务器缓存返回了数据。

ie返回200,没有读取客户端缓存(是没在客户端形成缓存吗?)。也返回了服务器缓存。

按照网上资料,在action中添加Response.Cache.SetOmitVaryStar(true);,最终结果没卵用。有毛病这是.

google变成了200,但是action代码在duration时间内不会执行里面方法体。也返回了数据。但是max-age一直是服务器的缓存时间,木有减少等变化。

google

          

ie

ie也是200,也返回了服务器缓存数据,action方法体没执行,没有读取客户端缓存(还是没有创建客户端缓存?)

            

就将就依靠服务器缓存来做缓存吧。

缓存:前端页面缓存、服务器缓存(依赖SQL)MVC3的更多相关文章

  1. 强制JSP页面刷新,防止被服务器缓存(可用于静态include强制刷新)

    对于jsp页面,为了防止页面被服务器缓存.始终返回同样的结果. 通常的做法是在客户端的url后面加上一个变化的参数,比如加一个当前时间. 我现在使用的方法是在jsp头部添加以下代码: <%    ...

  2. Django缓存机制以及使用redis缓存数据库

    目录 Django 配置缓存机制 缓存系统工作原理 Django settings 中 默认cache 缓存配置 利用文件系统来缓存 使用Memcache来缓存: 使用Local-memory来缓存: ...

  3. ASP.NET MVC3系列页面缓存、缓存依赖SQL(真实项目注意细节)

    缓存依赖数据库 第一步 1通过vs里面带的命令提示窗口. 2或者.NET Framework 版本 4(64 位系统)条件,%windir%\Microsoft.NET\Framework64\v4. ...

  4. [Asp.net]缓存之页面缓存,控件缓存,缓存依赖

    写在前面 上篇文章介绍了缓存的基本概念及用途,另外也举了一个简单的例子,数据缓存(将一些耗费时间的数据加入到一个对象缓存集合中,以键值的方式存储.可以通过使用Cache.Insert()方法来设置缓存 ...

  5. Nginx针对前端静态资源的缓存处理

    当用户上报一个线上的bug后,开发者修改前端代码的bug上新后,用户反映问题依旧存在的问题...这种情况是不是曾经遇到过,这个问题跟浏览器的缓存机制有很大关系(强制缓存和协商缓存,这里我就不介绍具体的 ...

  6. .Net Core 跨平台开发实战-服务器缓存:本地缓存、分布式缓存、自定义缓存

    .Net Core 跨平台开发实战-服务器缓存:本地缓存.分布式缓存.自定义缓存 1.概述 系统性能优化的第一步就是使用缓存!什么是缓存?缓存是一种效果,就是把数据结果存在某个介质中,下次直接重用.根 ...

  7. 前端学HTTP之缓存

    前面的话 Web缓存是可以自动保存常见文档副本的HTTP设备.当Web请求抵达缓存时,如果本地有“已缓存的”副本,就可以从本地存储设备而不是原始服务器中提取这个文档.本文将详细介绍缓存的相关内容 功能 ...

  8. 基于Html5缓存的页面P2P技术可行性探讨

    P2P技术,在分享大文件(你懂的)是现在必不可缺的技术,现在的人,已经很难想象在没有这玩意的互联网早期,人们是怎样的艰难求生.想当年,不要说电影,下一个稍大点的文件,都是很吃力的事情. 后来牛人科恩, ...

  9. HTTP 笔记与总结(7)HTTP 缓存(配合 Apache 服务器)

    在网络上,有一些缓存服务器,另外浏览器自身也有缓存功能. 例如: <!DOCTYPE html> <html lang="en"> <head> ...

随机推荐

  1. Django学习笔记之视图高级-类视图

    类视图 在写视图的时候,Django除了使用函数作为视图,也可以使用类作为视图.使用类视图可以使用类的一些特性,比如继承等. View django.views.generic.base.View是主 ...

  2. php 合并图片 (将活动背景图片和动态二维码图片合成一张图片)

    <?php //案例一:将活动背景图片和动态二维码图片合成一张图片 //图片一 $path_1 = './background.png'; //图片二 $path_2 = './FU0851_2 ...

  3. siftflow-fcn32s训练及预测

    一.说明 SIFT Flow 是一个标注的语义分割的数据集,有两个label,一个是语义分类(33类),另一个是场景标签(3类). Semantic and geometric segmentatio ...

  4. vivado源文件和仿真文件的建立

    目的:做一个3输入,1输出模块:其中只要有2个输入为1则输出为1: 1.打开vivado创建一个工程 2.选择保存路径和名称 3.选择创建rtl文件且勾选下面的选项 4.选择芯片如xc7a35tift ...

  5. install chrome and chrome driver on ubuntu

    sudo apt install python-minimal # python 2.7.xsudo apt install python-pip # https://www.ubuntuupdate ...

  6. PhpStorm 2018 破解方法

    破解方法如下: 1.修改phpstrom的验证服务器地址. 在C:\Windows\System32\drivers\etc目录下打开hosts文件,并在文件最后加入 0.0.0.0 account. ...

  7. 13行代码实现:Python实时视频采集(附源码)

    一.前言 本文是<人脸识别完整项目实战>系列博文第3部分:程序设计篇(Python版),第1节<Python实时视频采集程序设计>,本章内容系统介绍:基于Python+open ...

  8. H264--2--语法及结构

    转自:http://blog.csdn.net/yangzhongxuan/article/details/8003494 名词解释 场和帧 :    视频的一场或一帧可用来产生一个编码图像.在电视中 ...

  9. MSDE2008安装备忘

    MSDE2008安装备忘(适用于WIN7 8 10) 1.系统中必须要VC8.0,即VC2005运行库.2.系统中必须要有.net framework2.0.3.5.4.6运行库.3.windows防 ...

  10. ES - Dynamic templates 动态模板

    1.ES Mapping 在lucene中,索引中每个字段都需要指定很多属性,例如:是否分词.采用哪个分词器.是否存储等. 在ES中,其实索引中每个字段也需要指定这些属性,我们有时候并没有对这些属性进 ...