日期:2014-05-17  浏览次数:20789 次

java:大量访问页面如何处理?
很多人访问一个action,action访问数据库读取数据。 暂时不过多考虑框架方面,不想在数据库方面优化。最终找到2套解决方案。
1.内存缓存数据:把从数据库查询的数据存入servletContext里,做个线程定时器进行刷新servletContext,设计一个立即更新servletContext的方法。

2.物理硬盘存储:动态生成html静态页面,做个线程定时器进行刷新生成静态页,设计一个立即更新生成静态页方法。

这两天方案访问action 都以“计时器”间隔时间,判断是否访问数据库。通过立即更新方法保证必要数据的时时性。先说下我对这里个方案的评价。

1、由于访问数据放入内存,当客户端请求的时候可做最快的提取操作。不过依然进行jsp反射显示并生成(serlvet过程不详细说明)html发送到客户端。

2、生成静态页html放入硬盘,当客户端请求是要把返回目标指向html静态页位置进行返回。

这是我的基本想法,我觉得直接生成静态页方案更好一些。可是有人说存入servletContext里好。

只是一些简单优化方案,希望大家能一起交流下思想! 同时留下个疑问“可不可以直接把 压力过大页面直接放入缓存,每次读取直接内存返回?”

------解决方案--------------------
很多人访问一个action。
如果你说的是Struts的action,那么立足点是错误的。action是ThreadLocal。


1. Memcache
2. StaticContext 
都有现成的解决方案。
------解决方案--------------------
探讨
我的意思是,比如我分别在2台服务器上安装了apache
然后又分别在4台服务器上安装了tomcat
是不是每个apache分别与这4个tomcat做集群
就行了呢?

------解决方案--------------------
探讨
很感谢你,其实我想自己写一个 注解 然后控制action 返回自动生成html静态页存入本地,然后通过url从写来实现伪静态。这是我开这论坛的相反。所有不牵扯过多的框架和服务器技术。方便以后的编程。如何内存返回暂时没想出来。不过我记得response可以输出流。但是我这个数据流如何存在内存里?用一个静态变量还是什么?或者有什么更好的办法……