在ASP.NET实际项目开发中,缓存技术可以概括为客户端缓存,服务器端缓存和第三方缓存系统;在web程序中,我们为了避免因高并发产生的数据访问带来的性能问题,我们有必要把数据缓存于服务器端,使得后来的访问可以直接调用缓存数据,起到数据重用的作用。
服务器缓存是把数据放在服务器的内存中,客户端缓存则是把数据保存在浏览器里。
服务器上某一页面访问量较大,且是经常变动的话,用服务器缓存比较合适,这样访止同一时间造上数据库连接次数过多的情况。如果服务器上某一页面访问量较大,但是内容一直不变,或者非常长时间才变动的话,可以用客户端缓存,也可以用服务器端缓存。
服务器缓存不要滥用,要根据具体情况来使用,不然不但起不到提高效率的作用,反而比不使用缓存更糟糕;
客户端缓存滥用会导致用户长时间浏览的一直是固定不变的页面。
缓存能够帮我们提高服务质量的三个重要方面:
1.性能:缓存数据达到数据重用.避免了重复的物理数据加载;
2.实用性:如果其它的系统或者是数据库发生死机,那么仍然可以从缓存中取得数据不受局部硬件的影响;
3.可量测性:数据缓存后,减少了从服务器端加载数据。
客户端缓存:
除了服务端缓存外,客户端也可以缓存数据。它避免了向服务器重复提交获取重复数据的请求,把一些重复数据缓存到本地。服务端缓存是为了更快的处理客户端请求,而客户端缓存则是为了避免不必要的请求。
通过URL访问,客户端缓存才有效,举个例子(如下):
页面A是客户端缓存,同时页面A有一个跳向页面B的链接。通过A到达页面B,同时页面B也有一个链接,这个链接跳向A。通过B再次访问A,此时页面A获取的数据就是客户端的缓存数据,并没有请求服务端,是没有请求服务端。
asp.net提供了以下三种实现缓存的方式:
1:Session;2: Application 3: Cache objects,我们必须非常清楚它们之间的优势;
服务器端缓存:
1.Session状态管理:
session为每个人缓存数据,面向单个用户 即:自己.也就是说这样缓存的数据并不能同时供多人共享,限于为单个人缓存数据。
有三种实现方式,分别是:
InProc:它的数据存储在aspnet_wp.exe 进程中,数据会因为IIS的重启而丢失;
StateServer:较InProc不同的是,它可以存储于不同的服务器中;
SQLServer:它的数据存储在数据库中,数据不会因为IIS的重启而丢失数据。
2.ASP.NET Application :
ASP.NET为我们提供了另外一种全局变量保存方法,它是面向所有用户的,它的生命周期也依赖于应用程序,当应用程序初始化后它就开始重建。
Application对象用来保存对所有用户共享的信息,比如网站登录人数,
在修改Application对象的时候,需要lock unlock,防止同时操作导致出现问题,
Application对象成员的生命周期止于关闭IIS或使用Clear方法清除。
3.ASP.NET Cache:
cache 面向所有用户,和Application的区别:cache可以根据设定时间 来达到过期的目的,而不是Remove来移除缓存;虽然cache看起来特别像application,但它最大的不同是提供了数据缓存失效控制方法(cache可以指定过期时间)以及数据缓存依赖管理。也就是说,在cache中我们可以非常容易的按照事先设定好的过期时间来让cache过期,删除cache。
我们可以采取基本的三种缓存技术:页面缓存、局部页面缓存和数据缓存
1.页面缓存是指缓存整个页面,且设置刷新间隔时间,刷新间隔时间一般以秒为单位(注意:缓存不能全部刷新,且刷新间隔不依赖外部事件);
2.局部页面缓存也叫部分页面缓存,指通过设定影响页面的参数,此时的缓存存储页面的多个版本,一般情况需要按照参数值为这些页面版本设置索引;
3.数据缓存也叫应用程序缓存,指将需要大量服务器资源的对象存储在内存中,在ASP.NET中,是由Cache类来实现(Cache类的每个实例对应具体的每个应用程序);
应用程序缓存提供了一种编程方式,可通过键/值对将任意数据存储在内存中。使用应用程序缓存与使用应用程序状态类似。但是,与应用程序状态不同的是,应用程序缓存中的数据是易失的,即数据并不是在整个应用程序生命周期中都存储在内存中。使用应用程序缓存的优点是由 ASP.NET 管理缓存,它会在项过期、无效、或内存不足时移除缓存中的项。还可以配置应用程序缓存,以便在移除项时通知应用程序。