惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
The Last Watchdog
The Last Watchdog
Cisco Talos Blog
Cisco Talos Blog
A
Arctic Wolf
WordPress大学
WordPress大学
The Hacker News
The Hacker News
C
Cybersecurity and Infrastructure Security Agency CISA
H
Help Net Security
GbyAI
GbyAI
V
V2EX
Security Latest
Security Latest
Cyberwarzone
Cyberwarzone
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
P
Privacy International News Feed
I
InfoQ
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tor Project blog
P
Privacy & Cybersecurity Law Blog
C
Cisco Blogs
月光博客
月光博客
B
Blog
T
Threat Research - Cisco Blogs
I
Intezer
Recent Announcements
Recent Announcements
Latest news
Latest news
S
Schneier on Security
美团技术团队
量子位
H
Hacker News: Front Page
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Webroot Blog
Webroot Blog
N
News | PayPal Newsroom
Martin Fowler
Martin Fowler
博客园 - 三生石上(FineUI控件)
雷峰网
雷峰网
爱范儿
爱范儿
T
Tailwind CSS Blog
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 聂微东
Cloudbric
Cloudbric
MyScale Blog
MyScale Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Microsoft Security Blog
Microsoft Security Blog
人人都是产品经理
人人都是产品经理
S
Securelist
Hacker News: Ask HN
Hacker News: Ask HN
Y
Y Combinator Blog
Attack and Defense Labs
Attack and Defense Labs
TaoSecurity Blog
TaoSecurity Blog

博客园 - Lavenders

Java 正则表达式 量词 --- 三种匹配模式【贪婪型、勉强型、占有型】 信号量与PV操作 java的(PO,VO,TO,BO,DAO,POJO)解释 使用Application对象简单完成网站总访问人数的统计 更新记录后关闭子窗口并刷新父窗口的Javascript jquery jqPlot API 中文使用教程 一款基于bootstrap的datetimepicker ASP.NET下CKEditor3.6.4结合CKFinder2.3实现文本编辑器的上传功能 VS2010创建Web Service程序 【原创】VS2010中水晶报表与VS2008水晶报表版本冲突问题 【转】XSL和XSLT jQuery历史版本 【转】让Iframe自适应高度 【转】框架集中framespacing、border和frameborder属性的关系 【转】Meta标签详解 ASP.NET保存信息总结(Application、Session、Cookie、ViewState和Cache等) . 【原创】VS2008 Web应用程序带数据库制作安装程序 asp.net中的缓存(二)局部数据缓存 asp.net中的缓存(一)页面输出缓存
asp.net中的缓存(三)应用程序数据缓存
Lavenders · 2011-11-04 · via 博客园 - Lavenders

应用程序数据缓存

本缓存依赖于 System.Web.Caching 命名空间。

      该命名空间提供了缓存服务器上常用的数据的类,其包含的一个Cache类提供很多的方法,由于该类是一个字典类,所以,在其中存放任意的数据对象,如哈希表、数据集等。这些方法能够对这些对象进行增加、删除、失效等操作,甚至还可以依赖其它文件或缓存项的对象,并且能在从Cache中移除对象时执行回调以通知应用程序。示例代码如下:

应用程序数据缓存

1 // 增加命名空间
 2 using System.Web.Caching;
 3 
 4 /// <summary>
 5 /// 根据索引键值从缓存中获取对象
 6 /// </summary>
 7 /// <param name="cacheKey">索引键值</param>
 8 /// <returns>缓存的对象</returns>
 9 private static object GetObjectFromCache(string cacheKey)
10 {
11     Cache cache = HttpRuntime.Cache;
12     return cache[cacheKey];
13 }
14 
15 /// <summary>
16 /// 将对象以cacheKey为索引键值添加到缓存中
17 /// </summary>
18 /// <param name="cacheKey">索引键值</param>
19 /// <param name="obj">需要缓存的对象</param>
20 private static void AddObjectToCache(string cacheKey, object obj)
21 {
22     Cache cache = HttpRuntime.Cache;
23     cache.Insert(cacheKey, obj);
24 }
25 
26 /// <summary>
27 /// 将对象以cacheKey为索引键值添加到缓存中
28 /// </summary>
29 /// <param name="cacheKey">索引键值</param>
30 /// <param name="obj">需要缓存的对象</param>
31 /// <param name="absoluteExpiration">绝对过期时间</param>
32 /// <param name="slidingExpiration">最后一次访问所插入对象时与该对象过期时之间的时间间隔</param>
33 private static void AddObjectToCache(string cacheKey, object obj, DateTime absoluteExpiration, TimeSpan slidingExpiration)
34 {
35     Cache cache = HttpRuntime.Cache;
36     cache.Insert(cacheKey, obj, null, absoluteExpiration, slidingExpiration);
37 }
38 
39 protected void Page_Load(object sender, EventArgs e)
40 {
41     string cacheKey = "__test";
42 
43     // 从缓存中获取
44     object obj = GetObjectFromCache(cacheKey);
45     // 缓存里没有
46     if (obj == null)
47     {
48         // 把当前时间进行缓存
49         obj = DateTime.Now;
50         if (obj != null)
51         {
52             // 缓存时间30秒
53             int cacheTime = 30;
54             // 添加到缓存中去
55             AddObjectToCache(cacheKey, obj, DateTime.Now.AddSeconds(cacheTime), TimeSpan.Zero);
56         }
57     }
58     Literal1.Text = obj.ToString();
59 }

      这些代码就是比较好的缓存解决方法,不过这里有一个问题,当数据发生变化时,缓存里面还是过期的数据,只有等到缓存内容过期之后,才能重新获取新的数据。下面两篇就解决了这个问题。