之前,我把高并发的解决方案误认为是线程或者队列,因为在高并发的情况下有很多用户访问它们,导致系统数据不正确,数据丢失。所以我想到的就是用队列来解决。其实队列也可以用来解决问题。比如我们在竞拍产品、微博转发评论、秒卖产品等时候,同时访问的人数是非常多的,队列在这里就起到了特殊的作用。所有的请求都放入队列中,并在毫秒级内有序进行,这样就不会出现数据丢失和系统数据错误的情况。今天查了资料,发现高并发有两种解决方案,一种是使用缓存,一种是使用生成静态页面;二是从最基础的地方优化我们的代码编写,减少不必要的资源浪费:(1.不要频繁创建新对象,对整个应用中只需要一个实例的类使用单例模式。对于String连接操作,使用StringBuffer或者StringBuilder。对于实用型类,通过静态方法访问。2.避免使用错误的方式,比如Exception可以控制方法的启动,但是Exception应该保留stacktrace的消费性能,除非必要,do不使用instanceof进行条件判断,尽量使用比较的条件判断方式。使用JAVA中效率高的类,比如ArrayList,性能比Vector好。)首先,我没用过缓存技术。我认为它应该在用户请求时将数据保存在缓存中。下次请求会检测缓存中是否有数据,防止多次请求服务器,导致服务器性能下降,严重的会导致服务器崩溃,这只是我自己的理解,详细信息还是需要上网搜集;我认为你不应该使用生成静态页面的模式,我们看到很多网站在请求时页面的最后一部分发生了变化,比如“[url]http://developer.51cto.com/art/201207/348766.htm[/url]”,这个页面其实是一个服务器请求地址。转为htm后,访问速度会提高,因为静态页面没有服务器组件;这里我再多介绍一下:1、什么是静态页面:简单的说,如果我们访问一个链接,服务器对应的模块会处理这个请求,去对应的jsp界面,最后生成我们要看的数据.这样做的缺点很明显:因为服务器会处理每一个请求,如果高并发请求过多,会增加应用服务器的压力,不处理就会导致服务器宕机。那么如何避免呢?如果我们把test.do请求的结果保存成一个html文件,然后每次用户访问,不就可以减轻应用服务器的压力了吗?那么静态页面从何而来呢?总不能让我们手动处理每个页面吧?这就涉及到我们要讲解的内容了,静态页面生成方案……我们需要的是自动生成一个静态页面。当用户访问时,它会自动生成test.html,然后显示给用户。二、简单介绍一下掌握页面静态化解决方案应该掌握的知识点:1.基础——URLRewrite什么是URLRewrite?网址重写。用一个简单的例子来说明问题:输入网址,但实际访问的是abc.com/test.action,那么我们可以说网址被改写了。该技术应用广泛,有很多开源工具可以实现该功能。2.基础-Servletweb.xml如果您不知道web.xml中request和servlet是如何匹配在一起的,请搜索servlet的文档。这不是废话,很多人认为/xyz/*.do的匹配方式可以有效。如果您还不知道如何编写servlet,请搜索如何编写servlet。这不是一个玩笑。在各种集成工具满天飞的今天,很多人不会从头写一个servlet。3、基本方案介绍其中,对于URLRewriter部分,可以使用付费或者开源的工具来实现。如果url不是特别复杂,可以考虑用servlet实现,那么是这样的:总结:其实我们在开发中很少考虑这种问题,先实现功能。当一个程序员工作1到2年,他会觉得功能的实现不是最重要的,安全性能、质量等才是发展。人们应该最关心。今天讲的是高并发。我的解决方案是:1.采用分布式应用设计2.分布式缓存数据库3.代码优化
