|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
什么叫数据库怎么样?什么意思?你想单学数据库。(其实变成是我问的)缓存 1.ASP.NET缓存手艺概述
将数据库中的数据缓存到内存(也能够存储在其他场合),则无需在哀求每一个页面时都会见数据库。因为从内存中前往数据的速率一直比新供应的数据速率快,因此能够年夜年夜进步使用程序的功能。
ASP.NET为你利用缓存手艺供应最年夜的天真性,你能够缓存全部HTML页面,或是部分HTML页面,或是各类工具。你能够设置过时战略,或是设置依附性,即在其他资本如文件或数据库表改动时,主动移出缓存。
ASP.NET中有两种基础的缓存:
输入缓存
页面输入缓存是最为复杂的缓存机制,该机制将全部ASP.NET页面内容保留在服务器内存中。当用户哀求该页面时,体系从内存中输入相干数据,直到缓存数据过时。在这个过程当中,缓存内容间接发送给用户,而不用再次经由页面处置性命周期。一般情形下,页面输入缓存关于那些包括不必要常常修正内容的,但必要大批处置才干编译完成的页面出格有效。必要注重的是,页面输入缓存是将页面全体内容都保留在内存中,并用于完成客户端哀求。
能够经由过程在Web.config举行设置,设置缓存战略,在一组ASP.net页面中利用。还能够经由过程HttpCachePolicy类编程性设置页面缓存。
数据缓存
使用程序数据缓存供应了一种编程体例,可经由过程键/值对将恣意数据存储在内存中。利用使用程序缓存与利用使用程序形态相似。可是,与使用程序形态分歧的是,使用程序数据缓存中的数据是易掉的,即数据并非在全部使用程序性命周期中都存储在内存中。使用程序数据缓存的长处是由ASP.NET办理缓存,它会在项过时、有效,或内存不敷时移除缓存中的项,还能够设置使用程序缓存,以便在移除项时关照使用程序。
同时另有两种特别的缓存,基于以上的缓存模子:
部分缓存
部分缓存实质上是输入缓存。望文生义,页脸部分缓存是将页脸部份内容保留在内存中以便呼应用户哀求,而页面其他部份内容则为静态内容。页脸部分缓存的完成包含两种体例:控件缓存和交换后缓存。前者也可称为片断缓存,这类体例同意将必要缓存的信息包括在一个用户控件内,然后,将该用户控件标志为可缓存的,以此来缓存页面输入的部份内容。这一体例缓存了页面中的特定内容,而没有缓存全部页面,因而,每次都需从头创立全部页。比方,假如要创立一个显现大批静态内容(如股票信息)的页,个中有些部分为静态内容(如每周总结),这时候能够将静态部分放在用户控件中,并同意缓存这些内容。缓存后交换与控件缓存恰好相反。这类体例缓存全部页,但页中的各段都是静态的。比方,假如要创立一个在划定工夫段内为静态的页,则能够将全部页设置为举行缓存。假如向页增加一个显现用户名的Label控件,则关于每次页革新和每一个用户而言,Label的内容都将坚持稳定,一直显现缓存该页之前哀求该页的用户的姓名。利用缓存后交换机制,能够将页设置为举行缓存,将页的一般部分标志为不成缓存。在此情形下,能够向不成缓存部分增加Label控件,如许将为每一个用户和每次页哀求静态创立这些控件。
数据源缓存
数据源缓存是指在数据源控件如SqlDataSource,ObjectDataSource,andXmlDataSource中缓存数据,实践上是数据缓存,只不外缓存由控件外部完成。
缓存依附
缓存依附同意缓存项依附于别的一个资本,如许资本变更时,缓存项主动移出。
ASP.NET包含3种依附范例
依附于其他缓存项
依附于文件或文件夹
依附于数据库查询。
别的你还可使用聚合依附,或是自界说缓存依附。
缓存功效也有其本身的不敷。比方,显现的内容大概不是最新、最正确的,为此,必需设置符合的缓存战略。缓存增添了体系的庞大性并使其难于测试和调试,你设置的断点、监控变量等因为缓存在调试时都大概有效。
2.RainbowPortal中的数据缓存
RainbowPortal的Portal、页面、模块的设置信息、页面结构、主题等信息全体保留到数据库里,如果每次从数据据库读取,就会影响功能。Rainbow自此处置上利用了数据缓存手艺。
两个帮助类:
Rainbow.Framework.Settings.Cache.Key完成缓存键名的猎取,其办法都是静态的。因为Rainbow一个网站能够包括多个Portal,每一个Portal都有自力的设置,因而缓存的键名要辨别分歧的Portal。Key类为键名每一个加上Portal的别号作为前缀。
如猎取Portal设置信息的键名:
<P> publicstaticstringPortalSettings()
{
returnstring.Concat(Portal.UniqueID,"_PortalSettings");
}
Rainbow.Framework.Settings.Cache.CurrentCache类封装对以后缓存的操纵。
Rainbow.Framework.Site.Configuration定名空间中的PortalSettings类,PageSettings类,ModuleSettings类;Rainbow.Framework.Design定名空间中的LayoutManager类,ThemeManager类等,都使用了缓存手艺。一样平常历程为:先判别以后的Cache里有无缓存值,如有则从缓存中间接读取,若没有就从数据库中读取,然后保留到以后缓存中。
以PortalSettings类为例申明:
publicclassPortalSettings
{
......
publicstaticHashtableGetPortalBaseSettings(stringPortalPath)
{
Hashtable_baseSettings;
if(!CurrentCache.Exists(Key.PortalBaseSettings()))
{
//从数据库里读取
......
保留到缓存中
CacheDependencysettingDependencies=
newCacheDependency(
newstring[]
{
LayoutManager.Path,
layoutManager.PortalLayoutPath,
ThemeManager.Path,
themeManager.PortalThemePath
});
using(settingDependencies)
{
CurrentCache.Insert(Key.PortalBaseSettings(),_baseSettings,settingDependencies);
}
}
else
{
_baseSettings=(Hashtable)CurrentCache.Get(Key.PortalBaseSettings());
}
return_baseSettings;
}
} 针对缓存移除的成绩,Rainbow一方面接纳了缓存依附主动移除,如上述代码中的settingDependencies,别的一方面在程序中显式移出,如在PortalSettings类中,当变动Portal设置后,就移除缓存:
<P> publicstaticvoidUpdatePortalSetting(intportalID,stringkey,stringvalue)
{
//更新
....
CurrentCache.Remove(Key.PortalSettings());
} RainbowPortal的一些模块中,也用到了缓存手艺,但有些存在必定成绩,如WhosLoggedOn模块中也利用了数据缓存,可是并没有经由过程Rainbow.Framework.Settings.Cache.Key类完成缓存键名的猎取,如许在一个站点存在多个Portal的时分,站点的统计数会呈现不准确的情形。J2EE比较成熟一点,一些比较出名的企业应用软件都是基于J2EE的。以后的发展就不好说了。不过java比较烦,学.net的话,微软把很多工具都封装好了,学起来可能容易一点。 |
|