构建高性能ASP.NET站点之三 细节决定成败 - 建站学
时间:2010-08-30 来源:缘分星空
前言:曾经就因为一个小小的疏忽,从而导致了服务器崩溃了,后来才发现:原来就是因为一个循环而导致的,所以,对“注意细节“这一说法是深有感触。
问题的描述
首先,描述一下故事的背景:(希望大家耐心的故事读完)
在网站中,网页中的分页控件每次显示10条数据,每次点击下一页,就再次去取下一个10条数据。至于分页的方法怎样做,方法有很多,相信这点大家都知道。
过程是这样的:在用户请求数据的时候(考虑到了用户的操作和网站的访问量)我会第一次取出500条数据,然后把数据放在缓存中,也就是说,我取出了50页的数据,放在缓存中,这样如果,以后用户请求第一页到第49页的时候,就直接从缓存中拿数据。
如下图:
第一个数据块:
采用键值对的形式:字典保存
如果用户请求到了49页以后,那么就再次从数据库中取出下一个数据块(包含501到1000数据),然后,现在内存中就有了1000条数据。
至于缓存多久,数据什么失效,失效后怎么做,这里暂不谈论。(网站在这种缓存策略下运行的很好)。
代码如下:
List<Product> products=GetDataFromCacheOrDatabase(condition,pageIndex,count….);
代码的意思很清楚,从缓存中拿数据,如果缓存中没有对应的数据,那么就先从数据库中拿500条数据,然后放在缓存中,最后返回10条数据。
后来,因为某些功能的需要,需要返回当前页的前6页数据和后6页的数据,例如:如果当前页是第12页,那么就要返回12页之前6页Product(也就是第6,7,8,9,10,11页的数据),和第12页后的页的Product(第13,14,15,16,17,18页的数据)。
如下:
当然,如果当前页是第5页,那么就把之前所有5页的数据都返回,另外再加上第5页之后的6页数据。
这里就可能涉及到跨块获取数据,如:
如果当前页是第48页的时候,那么返回前6页数据是没有什么问题的,那么后6页的数据就不足了,因为49,40也得数据可以从缓存的数据块中取到,至于51,52,53,54页的数据,就需要再次从数据库中读取,然后再次缓存(如果事先没有被缓存)。
最后在缓存中的数据如下:
然后调用方法:(伪码)
List<Product> products=GetDataFromCacheOrDatabase(condition,42, 126….);
上面传入的是从第42页开始的数据,也就是第48页的前6页和后6页的数据。
day cruise to the bahamasmediterranean princess cruisessamsonite 30 luggage pricebackpack cover airportmodern art watercolorhilarious sms text messagesmotor cycle gearcool luggage tagsfall kids craft ideasbrown luggage tagsdonna karan kidsdolce gabbana spring summer 2010gills cruise clubpolka dot messenger bagspictures paintingpet friendly family vacationcruiseplannershelena seger pictures dsquared2 spring summer 2009carnival cruise line promotionssinger heater partsblaines art supplyphysician medical bagshoe leatherhistory oil paintinglast minute disney vacationostrich leather upholsteryleather and lace cdbig and tall leather coatsoverstock pursesroyal caribbean legend of the seas cruisesnew fendi spy for salebest disney cruise excursionswedding flowersmission beach vacation rental ownerdanier leather factory outletlast minute cruise deals bahamaswhite quilted handbagGucci-203517cheap 4 night cruisemens flared jeansbeachfront only vacation rentals bloghartmann tweed 50top 10 vacation resortscoach handbags clearancechristmas tree rubber stampcarnival valor cruise linehistory designer handbagscruises bahamaschain pursesofas chairs