- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
五十八:在程序启动阶类段缓存数据
在ASP.NET 2.0中操作数据之五十八:在程序启动阶段缓存数据
作者:heker2007 字体:[ HYPERLINK javascript:turnbig() 增加? HYPERLINK javascript:turnsmall() 减小] 类型:转载 时间:2016-05-17 HYPERLINK /article/84416.htm \l comments ?我要评论
前面我们分别介绍了在ObjectDataSource缓存数据和在分层架构中缓存数据,本文介绍ASP.NET 2.0中在程序启动阶段在Global.asax文件中缓存数据。
导言: 前面2章考察了在表现层和缓存层缓存数据。在第56章,我们探讨了在表现层设置ObjectDataSource的相关cache属性来缓存数据。在第57章,我们探讨了创建一个单独的分开的缓存层。这2章都是采用“应激装载”(reactive loading)的模式来缓存数据。该模式下,每次请求数据时,系统先检查其是否在内存,如果没有,则从数据源——比如数据库,来获取数据,然后将其存储在内存里。该模式的优势在于执行起来很容易;而缺点之一在于应“请求”(requests)而执行。试想一下,在前面章节,我们通过缓存层来展示产品信息,当第一次登录该页面,或缓存数据因为缓存时间结束等原因从内存清除以后,再次访问该页面时,因为数据没有储存在内存里,请求只能从数据库获取数据。这样一来花的时间就比直接从内存获取数据要长一些。
“预装载”(Proactive loading)可以使用2种模式来预装载数据。第一种模式,Proactive loading使用一些方法( process)来判断源数据(underlying data)是否发生改变,并及时对缓存数据进行更新——比如,周期性的检查源数据;或者当源数据发生改变时,立即通知更新。不过该模式的弊端在于执行起来比较困难,你必须创建、管理、执行一个具体的方法来检查源数据的更改情况,以更新缓存数据。
另一个模式,同时也是本文要探讨的内容,就是在程序启动时便装载数据入内存。该模式对缓存静态数据(static data)尤其有用,比如查找数据库表里的记录。注意:关于“应激装载”(reactive loading)和“预装载”(proactive loading)的区别,请参考文章《 Caching Architecture Guide for .NET Framework Applications》的《Managing the Contents of a Cache》章节:( HYPERLINK /en-us/library/ms978503.aspx /en-us/library/ms978503.aspx)
第一步:在程序启动阶段决定缓存哪些数据
我们在前面2章探讨的reactive loading模式的示例适合处理这些数据:周期性地改变且生成(generate)数据不需要太长的时间。但是,如果缓存的数据从未改变,那么reactive loading模式使用的周期(expiry)就显的有点多余。另外,如果需要缓存的数据要花很长的时间才能生产,当用户请求发现内存为空时,用户将等很长的时间来检索并返回数据。对此,可以考虑将静态数据和需要很长时间才能生成的数据在程序启动阶段就缓存。
虽然,数据库有很多动态的,经常改变的值;不过静态值也不少。举例,数据库表Patients有一个PrimaryLanguage列,其值可以为English, Spanish, French, Russian, Japanese等。不过我们不会直接在表Patients里存储“English”或 “French”等字符串,而是在供查找的表Languages里存储。如图1:John Doe的primary language是English,而Ed Johnson的是Russian.
图1:表Languages为表Patients所使用的查找表
在编辑或创建新patient的用户界面里,将包含一个下拉列表框,列出表Languages里的所有语言项。不缓存的话,每次登录该界面,系统都会查询表Languages,这样显地和浪费也没有必要。因为表Languages不会频繁的改变。
我们可以用前面探讨的reactive loading模式来对数据Languages进行缓存。不过,reactive loading模式会使用基于时间的缓存周期(time-based expiry),这对静态数据来说没有必要。最好的办法是在程序启动阶段进行预装载。
在本文,我们将探讨如何缓存“查找表”(lookup table,例如Languages表对Patients表来说就是查找表)数据
您可能关注的文档
最近下载
- 具身智能机器人操作系统与应用技术.pdf VIP
- 具身机器人行业市场前景及投资研究报告:具身智能大脑,人形机器人发展.pdf VIP
- 半导体外延工艺技术发展趋势.pptx VIP
- 离散制造数字化智能工厂解决方案.pdf VIP
- 2025年度华医网继续教育答案-常见心血管疾病的中西医结合诊疗策略.docx VIP
- GB∕T 1355-2021 小麦粉 GB∕T 1355-2021 小麦粉.pdf
- 欧洲人的标准 EN10088-1-2005-Eng.pdf VIP
- Panasonic XQG70-E70XS E70GS E70GWwashing machine Manual说明书用户手册.pdf
- 函数的定义与函数的性质.pptx VIP
- 人工智能行业市场前景及投资研究报告:养老机器人,AI养老.pdf VIP
文档评论(0)