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

推荐订阅源

WordPress大学
WordPress大学
Microsoft Security Blog
Microsoft Security Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
V
Visual Studio Blog
宝玉的分享
宝玉的分享
IT之家
IT之家
人人都是产品经理
人人都是产品经理
T
The Blog of Author Tim Ferriss
I
InfoQ
B
Blog RSS Feed
T
Threatpost
博客园_首页
M
MIT News - Artificial intelligence
Spread Privacy
Spread Privacy
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Know Your Adversary
Know Your Adversary
U
Unit 42
Engineering at Meta
Engineering at Meta
C
Cyber Attacks, Cyber Crime and Cyber Security
月光博客
月光博客
Scott Helme
Scott Helme
T
Tor Project blog
有赞技术团队
有赞技术团队
AWS News Blog
AWS News Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Last Week in AI
Last Week in AI
S
Schneier on Security
Vercel News
Vercel News
博客园 - Franky
C
Cybersecurity and Infrastructure Security Agency CISA
L
LINUX DO - 热门话题
NISL@THU
NISL@THU
L
LangChain Blog
爱范儿
爱范儿
Google DeepMind News
Google DeepMind News
The GitHub Blog
The GitHub Blog
雷峰网
雷峰网
Latest news
Latest news
C
CXSECURITY Database RSS Feed - CXSecurity.com
Hugging Face - Blog
Hugging Face - Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
G
GRAHAM CLULEY
S
Security Affairs
A
About on SuperTechFans
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
大猫的无限游戏
大猫的无限游戏
W
WeLiveSecurity
Cisco Talos Blog
Cisco Talos Blog
罗磊的独立博客

博客园 - 灰灰狼

架构与设计概要 IoC概要 需求分析概要 接上文,支持并发数量的完美版本 消息队列并发处理基类-简化版 2013年5.28~7.27 Microsoft FTE 微软面试总结 String Format for DateTime 多语言建议 multi-language 问题观 New life I would like About that task about wcf 基于证书的WCF安全开发详解 呼唤程序员精神——关于我今天发起的讨论的总结 asp.net mvc下实现窗口不关闭,就让Session不过期 正确的产品开发策略
asp.net缓存(20100804完善版) - 灰灰狼 - 博客园
灰灰狼 · 2010-08-03 · via 博客园 - 灰灰狼

缓存是解决性能问题的重要手段,下面做个简单的总结:

1. 缓存的分类:Cache对象、页面输出缓存

Cache对象就是用Cache["x"]=obj;或Cache.Add方法(只有用Add方法才可以添加依赖项)。

页面输出缓存可以用页面声明方式的<%@ OutputCache Duration="1" %>,或用代码Response.Cache.SetCacheability来设置。

2. 缓存依赖项:一个缓存项可以依赖于4种资源:(1)另一个缓存项、(2)一个或多个文件、(3)SqlCacheDependency指明依赖于一个数据库表或一个Select结果、(4)组合多个依赖项的AggregateCacheDependency对象。

3. SqlCacheDependency的工作方式:Polling或Notification,后者需要SQLServer2005完整版以上版本的支持,如果是2000或者2005Express则只能用Polling。

Polling的意思是Asp.net隔一定的时间间隔就去查一次数据库,当检测到某个表有变化时就需要删除依赖于此表的缓存项。它的工作过程需要一些基础表和存储过程的支持,配置有点复杂,需要用aspnet_regsql来生成这些基础结构,并针对需要依赖的表一个表一个表的执行命令来生成相应的触发器。这种工作方式因为是需要定期去拉数据,当数据没变的时候也要拉,所以会有一些的性能损耗,而且从数据变化的时间到下一次拉数据的时间之间,缓存项的数据可能是不准的,因为它已经过时了。要实现实时的更新,需要额外的代码,来生成另一个缓存项X作为原缓存项Y的依赖项,一般方法是让X缓存项存储当前时间。Polling方式需要用SqlCacheDependency类的构造函数是new SqlCacheDependency(DbName, TableName). web.config里需要设置caching节,设置Polling的时间间隔,以及数据库名与连接字符串间的映射。

Notification能够做到比Polling这种数据表级更细的程度,因为Select语句可以加Where子句,只要Where里包含的数据没有变,缓存项就不必过期。它要用SqlCacheDependency的另一个构造函数new SqlCacheDependency(SqlCommand). web.config无需任何配置。可能需要为访问数据库的用户配置必要的Subscribe Query Notification权限。启动库的Service Broker。在global.asax里的Application_Start和End里加SqlDependency.Start和Stop(ConnectionString).

我有2个疑问:

1. 有次面试时碰到的问题:当用Cache["x"]=obj;时,它的过期时间是多长?是永久不过期?还是内存不够时会被删除?还是有个默认的过期时间,比如15分钟?

回答:有朋友回答是永久的,直到有垃圾回收的需要时才删除。

2. 当用Notification时,需要使用new SqlCacheDependency(SqlCommand)来创建依赖项,这样做显然是用一种原始的方法取数据,即用有很多限制的Select语句来取数据,有没有办法用存储过程呢?

回答:暂无。

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

大家读完之后如发现有错漏之处请留言提出,万分多谢!