【发布时间】:2013-05-16 21:12:13
【问题描述】:
我在 JSP 中有以下代码,每次用户访问该页面时都会重复运行。所有访问者的数据库结果值都是相同的。该页面采用参数“服务”,并基于它执行 SQL 查询。第二个 SQL 查询是根据第一个查询生成的“id”执行的。如果有 20 个不同的服务,它会运行以下查询 20 次,然后只显示页面。那么,有什么方法可以临时存储这些结果(使用缓存或其他东西),以便这些查询只运行一次/第一次访问,然后对于其他请求不进行数据库请求?这样页面加载速度非常快,并且不消耗任何 cpu/内存。我只能在 JSP 中执行此操作,并且拥有 apache tomcat 6。
================= EDITED PART================
我通过执行 application.getAttribute()/setAttribute() 找到了第一个解决方案。
if(application.getAttribute(service)==null
{
//do first query
application.setAttribute(service,name);
}
else name=application.getAttribute(service);
现在如何在第二个查询中使用 id 参数???请指教。。
=============================================
String service=request.getParameter("service");
sqlstr = "SELECT uniqueid,name,body FROM tbl_texts WHERE
serviceunique='"+service+"' AND webdomain='" + webdomain + "'";
rs = DbUtils.getRs(con,sqlstr);
if (rs.next()) {
id = rs.getString("uniqueid");
name = rs.getString("name");
body=rs.getString("body");
}
rs.close();
sqlstr = "SELECT animage,awidth,aheight FROM tbl_Images WHERE
uniqueid='" + id + " AND profile='" + imageprofile + "'";
rs = DbUtils.getRs(con,sqlstr);
if (rs.next()) {
images = rs.getString("animage");
size= (int) (rs.getDouble(awidth) * rs.getDouble(rs.getDouble(aheight) )
rs.close();
提前致谢!
【问题讨论】:
-
首先,你只有一个服务参数,怎么会有20种不同的服务呢?第二:在尝试通过使架构更复杂来提高性能之前,我会确保您确实存在性能问题。最重要的是,我会先让代码干净、正确且不受 SQL 注入攻击,然后再尝试快速。 Java 代码不应该在 JSP 中,并且必须使用准备好的语句。
-
@JBNizet.. 是的,这是一个复杂的系统,我已经被赋予处理它,我不能这么快地更改为 servlet..因为这是一个紧急情况,我需要找到一些临时解决方案.此页面包含所有正文部分,例如文本、横幅和图像,并且此页面通过传递参数“服务”从另一个(索引)页面调用。有时参数的数量变成 20,就像这个页面被索引页面调用 20 次一样。但是这个页面再次执行 SQL 查询,这很重..所以任何解决方案! ?
-
坦率地说,通过添加一些缓存使代码更加混乱并不是一个好的解决方案。首先重构和清理。然后仅在必要时进行优化。
-
@JBNizet...所以你没有任何替代解决方案@!!