60-在程序启动阶段缓存数据
前面2章考察了在表现层和缓存层缓存数据。在第58章,我们探讨了在表现层设置ObjectDataSource的相关cache属性来缓存数据。在第59章,我们探讨了创建一个单独的分开的缓存层。这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》章节:(/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表来说就是查找表)数据和其它的静态信息。
第二步:考察缓存数据的不同途径
在一个ASP.NET应用程序里,我们可以使用多种方法来缓存信息。在前面的教程我们看到的是data cache,其实通过使用static members(静态成员)或application state(应用程序状态)我们也可以将对象(objects)缓存。
当处理一个类时,我们在访问其成员(members)前,应先实例化。比如,为了调用BLL层里的一个方法,我们首先要创建该类的实例:
ProductsBLL productsAPI = new ProductsBLL();productsAPI.SomeMethod();productsAPI.SomeProperty = Hello, World!;
您可能关注的文档
- 6.2.1空间两条直线的位置关系.ppt
- 5I留住员工.ppt
- 5A系统落地.ppt
- 6.2Internet基本知识.ppt
- 电力系统中性点运行方式简介.ppt
- 57第五十七章性传播疾病病人的的护理.ppt
- 5I第五章方案的构思及其方法.ppt
- 电力电子第二章整流电路课件.ppt
- 电力系统基础(第七章)--126-华北电.ppt
- 6.2在实践中追求和发展真理(共17张PPT).ppt
- 2026年中国通讯模块市场数据调查、监测研究报告.docx
- 南京体育学院《房屋查验实训》2023-2024学年第一学期期末试卷.doc
- 2025年江苏省苏州市吴江市四上数学期末联考试题含解析.doc
- (2026年)肝硬化病人的护理查房PPT课件.pptx
- 2024年河南省商水县联考数学八上期末教学质量检测试题含解析.doc
- 西安高新科技职业学院《人力资源管理模拟沙盘实验》2023-2024学年第二学期期末试卷.doc
- 周口职业技术学院《中国传统政治与文化》2023-2024学年第一学期期末试卷.doc
- 2026年中国通讯网络高速PCB市场数据调查、监测研究报告.docx
- 北京外国语大学《学术英语(一)》2023-2024学年第一学期期末试卷.doc
- 河北省廊坊市霸州市2026届数学三年级第一学期期末检测试题含解析.doc
最近下载
- 操作手册_Fluke754操作手册.pdf
- 关于事业单位岗位管理制度实施后有关问题的处理意见.docx VIP
- 关于绑架的小故事-绑架关起来的故事.docx VIP
- 2019±800kV及以上特高压直流系统用直流转换开关.docx VIP
- ±800kV特高压直流输电线路工程导线选型研究-工硕士专业毕业论文.docx VIP
- 饿了么何以从草根中脱颖而出?.pdf VIP
- 商务礼仪第三版课后习题答案徐汉文、张云河高等教育出版社.pdf VIP
- PC-CE轮机长循环检验报告模板.docx VIP
- PC-CE轮机长循环检验报告模板.doc VIP
- 杨涟人物研究——以《杨忠烈公文集》为中心.docx VIP
原创力文档

文档评论(0)