您可以提高您站点的访问速度那么就需要用到cache(缓存)通常可以我们使用cache来处理经常检索的结果或不经常改变的数据结果 你将学习 <![if !supportLists]>l <![endif]>如何使用缓存来提高网站的响应速度 本章介绍的功能 <![if !supportLists]>l <![endif]>WebCache helper 缓存来提高网站的响应 每当人们请求您站点中的页面时Web服务器都会做一些工作以便执行请求对于其中一些包括有服务器端执行代码的页面Web服务器可能会执行很长时间来完成任务比如从数据库中检索数据这些任务获取在较少数量的的请求时并不需要太长的时间但是如果网上有了大量的流量所有用户都进行了独立请求的时候会导致Web服务器增加很多的工作从而使执行速度变的缓慢这最终会影响到网站的性能 在这种情况下改善您网站性能的方法之一便是缓存数据如果您的网站上有在请求时响应的是相同数且数据并不需要针对个人进行改变另外在时间上也并不敏感那么我们可以将数据缓存在用户每次请求时并不在Web服务器上重新计算而是在第一次访问时就将数据放到缓存中在下一次请求时只获取缓存中的数据 在一般情况下您缓存的信息并不经常改变当你把信息放到缓存它将存储在Web服务器上的内存中你可以指定它应该被缓存多久从几秒钟到几天当缓存期限到期该信息自动从缓存中删除 注意 缓存中的项目并没有过期但可能会因为其他原因可能会被删除例如Web服务器可能暂时低位运行内存它回收内存的方法之一便是移出缓存项正如你看到的即使你放入缓存信息你必须检查以确保它在您使用时仍然存在 想象您的网站有一个页面显示当前的温度和天气预报为了得到这种类型的信息您可能会发送一个请求到外部服务因为这个信息并不需要有太大的改变(例如在两个小时内)因为和外部请求服务需要时间和带宽所以这是一个很好的被缓存项目 ASPNET包括WebCache helper使得您很容易地将缓存功能添加到网站并添加到缓存中的数据在此过程中您将创建一个页面用来缓存的当前的时间当然这不是一个真实的例子因为当前的时间是不经常改变而且不需要复杂的计算然而这是一个很好的方式来说明缓存在工作 <![if !supportLists]> <![endif]>添加一个新页面网站名为WebCachecshtml <![if !supportLists]> <![endif]>在页面中添加以下代码和标记 @{ var cacheItemKey = Time; var cacheHit = true; var time = WebCacheGet(cacheItemKey) if (time == null) { cacheHit = false; } if (cacheHit == false) { time = @DateTimeNow; WebCacheSet(cacheItemKey time false) } } <!DOCTYPE html> <html> <head> <title>WebCache Helper 例子</title> </head> <body> <div> @if (cacheHit) { @:Found the time data in the cache } else { @:Did not find the time data in the cache } </div> <div> 页面上的时间被组成存为 @time </div> </body> </html> 在cacheItemKey代码示例中使用time定义了一个缓存项当您缓存数据时需要为缓存定义一个名称在整个网站中这个缓存是独立存在的 该代码首先读取time缓存项中的值如果返回值不为空说明代码从缓存项目中获取了time缓存并保存到变量time中 然而如果缓存条目不存在(也就是说它是空的)代码会设置time的值为当前时间将它添加到缓存中并设置一分钟的到期时限如果页面请求没有在一分钟之内进行那么缓存中的项目将被丢弃(默认缓存项到期时间是分钟) 此代码说明的问题是您应该总是使用时缓存数据在您得到的新的缓存之前总是先检查WebCacheGet方法是否返回null值请记住缓存条目可能因为其他一些原因已过期或可能已被删除所以从来不能保证任何给定的项目在缓存一直存在 <![if !supportLists]> <![endif]>在浏览器中运行WebCachecshtml(请确保页面在选定的工作区中然后再运行它)当您第一次请求页面时时间数据不在缓存中代码将添加时间值到缓存中 <![if !supportLists]> <![endif]>在浏览器中刷新WebCachecshtml这一次时间数据是从缓存中获取的请注意你最后一次浏览网页以来的时间一直没有改变 <![if !supportLists]> <![endif]>等待一分钟后缓存被清空然后刷新页面再次表明时间数据在缓存中没有找到更新的时间将被添加到缓存项中 |