一个良好的应用程序常会使用缓存来处理数据以减少对数据库或者其它存储系统的访问次数,目的是减少服务器的负载,进而使得程序运行更加的高效。
缓存有Server-Side和Client-Side两种。先说服务器端缓存,应用程序在读取数据的时候先会去内存检查是否已建立缓存,如果已建立缓存,则直接从缓存读取,这样读取速度要快很多。数据更新时,同时更新缓存和数据库。
ASP.NET为您提供了一个强大的、便于使用的缓存机制,用于将需要大量服务器资源来创建的对象存储在内存中。缓存这些类型的资源会大大改进应用程序的性能。缓存是由Cache类实现的;缓存实例是每个应用程序专用的。缓存生存期依赖于应用程序的生存期;重新启动应用程序后,将重新创建Cache对象。
设计Cache类是为了便于使用。您可以将项放置在Cache中,并在以后使用简单的键/值对来检索这些项。有关如何执行此操作的示例,请参见如何:将项添加到缓存中和如何:检索缓存项的值。Cache类提供了强大的功能,允许您自定义如何缓存项以及将它们缓存多长时间。例如,当缺乏系统内存时,缓存会自动移除很少使用的或优先级较低的项以释放内存。该技术也称为清理,这是缓存确保过期数据不使用宝贵的服务器资源的方式之一。当执行清理时,您可以指示Cache给予某些项比其他项更高的优先级。若要指示项的重要性,可以在使用 Add 或 Insert 方法添加项时指定一个CacheItemPriority枚举值。
当使用Add或Insert方法将项添加到缓存时,您还可以建立项的过期策略。您可以通过使用DateTime值指定项的确切过期时间(绝对过期时间),来定义项的生存期。也可以使用 TimeSpan 值指定一个弹性过期时间,弹性过期时间允许您根据项的上次访问时间来指定该项过期之前的运行时间。一旦项过期,便将它从缓存中移除。试图检索它的值的行为将返回null(在 Visual Basic 中为Nothing),除非该项被重新添加到缓存中。
对于存储在缓存中的易失项(例如那些定期进行数据刷新的项或那些只在一段时间内有效的项),通常设置一种过期策略:只要这些项的数据保持为最新的,就将它们保留在缓存中。例如,如果您正在编写一个应用程序,该应用程序通过另一个网站获取数据来跟踪体育比赛的比分,那么只要源网站上比赛的比分不更改,就可以缓存这些比分。在此情况下,您可以根据其他网站更新比分的频率来设置过期策略。您可以编写代码来确定缓存中是否是最新的比分。如果该比分不是最新的,则代码可以从源网站读取比分并缓存新值。
最后,ASP.NET允许您根据外部文件、目录(文件依赖项)或另一个缓存项(键依赖项)来定义缓存项的有效性。如果具有关联依赖项的项发生更改,缓存项便会失效并从缓存中移除。您可以使用该技术在项的数据源更改时从缓存中移除这些项。例如,如果您编写一个处理XML文件中的财务数据的应用程序,则可以从该文件将数据插入缓存中并在此XML文件上保留一个依赖项。当该文件更新时,从缓存中移除该项,您的应用程序重新读取XML文件,然后将刷新后的数据放入缓存中。
注意:Cache对象没有关于它所包含项的内容的信息。它只保留对这些对象的引用。它还提供跟踪它们的依赖项和设置到期策略的方法。