关于缓存的学习记录

看到一个大神关于MVC缓存的学习文章,希望大家一起学习。

原文地址:http://www.cnblogs.com/iamlilinfeng/p/4419362.html

 

缓存介绍:

个人对于缓存的理解就是这样子的。用户访问一个页面A,后端找到A.cshtml之后还要各种构造~转换~序列化。。。(我也不是很懂~感觉有这些东西),然后把这些东西给用户的界面。但是如果这个页面有一个标题是绑定在数据库的,那每次用户访问这个页面都要练数据库查询数据然后再构造~转换~序列化。。。。再给用户页面不很麻烦吗?。如果用户第一次访问这个页面的时候我们把这个页面构造~转换~序列化。。。之后的成品保存下来,每次用户要得时候直接给成品,这样子不就快多了吗?

 

Controller缓存

这个缓存是让该控制器下面所有方法都缓存的(我测试了一下不仅仅页面可以缓存,貌似方法也可以缓存)

控制器代码如下:

页面代码如下:

从上面可以看出,Index页面会显示一个时间,且用ajax请求的方式在控制台输出了Mess方法请求的时间。

下面是运行效果:

只要是在10秒之内的刷新、浏览,这个时间都是不会变的(不过这个页面从生成到ajax请求结束居然花了2S。。。)

 

关于数据库依赖

 在开头说道A页面有一个数据要访问数据库,这个时候缓存就不仅仅是依赖刷新时间了,而是依赖数据库是否有更新。

 

 先按照上述节点补充,然后在VS的命令行中运行

aspnet_regsql -S localhost -U sa -P 123456 -ed -d wcfDemo -et -t user

期中

      -S localhost:数据库地址

      -U sa:数据库登录名

      -P 123456:数据库登录密码

      -d wcfDemo:数据库的名称

      -t user:表名称(小写)

 这样子每当数据库有刷新,页面的缓存就会失效,重新保存了~

 

原文链接:http://www.cnblogs.com/iamlilinfeng/p/4419362.html

 另外补充不需要启动的方式

//启用更改通知
SqlCacheDependencyAdmin.EnableNotifications(System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);

//连接到 SQL Server 数据库并为 SqlCacheDependency 更改通知准备数据库表
SqlCacheDependencyAdmin.EnableTableForNotifications(System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString, "QJInfo_SiteInfo");

//制定缓存策略
SqlCacheDependency scd = new SqlCacheDependency("SiteInfoSqlDependency", "QJInfo_SiteInfo");

//插入缓存
cache.Insert("SiteInfo", siteInfo, scd, DateTime.Now.AddHours(5), Cache.NoSlidingExpiration);

之后数据库表有插入、更新或删除操作时,该缓存就会自动失效,数据库里边多了个表AspNet_SqlCacheTablesForChangeNotification来记录相关表变化信息。

posted @ 2017-07-13 10:16  陌陌秋雨  阅读(590)  评论(0编辑  收藏  举报