有时要为每一篇文章统计其点击次数,如果每一次浏览都要更新一次库的话,那性能在访问量很大的情况下,服务器的压力就会很大了,比较好一点的方法就是先将要更新的数据缓存起来,然后每隔一段时间再利用数据库的批量处理,批量更新库。源码如下:
CountBean.java
/*
* CountData.java
*
* Created on 2006年10月18日, 下午4:44
*
* To change this template, choose Tools | Options and locate the template under
* the Source Creation and Management node. Right-click the template and choose
* Open. You can then make changes to the template in the Source Editor.
*/
package com.tot.count;
/**
*
* @author http://www.tot.name
*/
public class CountBean {
private String countType;
int countId;
/** Creates a new instance of CountData */
public CountBean() {}
public void setCountType(String countTypes){
this.countType=countTypes;
}
public void setCountId(int countIds){
this.countId=countIds;
}
public String getCountType(){
return countType;
}
public int getCountId(){
return countId;
}
}
CountCache.java
/*
* CountCache.java
*
* Created on 2006年10月18日, 下午5:01
*
* To change this template, choose Tools | Options and locate the template under
* the Source Creation and Management node. Right-click the template and choose
* Open. You can then make changes to the template in the Source Editor.
*/
package com.tot.count;
import java.util.*;
/**
*
* @author http://www.tot.name
*/
public class CountCache {
public static LinkedList list=new LinkedList();
/** Creates a new instance of CountCache */
public CountCache() {}
public static void add(CountBean cb){
if(cb!=null){
list.add(cb);
}
}
}
CountControl.java
/*
* CountThread.java
*
* Created on 2006年10月18日, 下午4:57
*
* To change this template, choose Tools | Options and locate the template under
* the Source Creation and Management node. Right-click the template and choose
* Open. You can then make changes to the template in the Source Editor.
*/
package com.tot.count;
import tot.db.DBUtils;
import java.sql.*;
/**
*
* @author http://www.tot.name
*/
public class CountControl{
private static long lastExecuteTime=0;//上次更新时间
private static long executeSep=60000;//定义更新间隔时间,单位毫秒
/** Creates a new instance of CountThread */
public CountControl() {}
public synchronized void executeUpdate(){
Connection conn=null;
PreparedStatement ps=null;
try{
conn = DBUtils.getConnection();
conn.setAutoCommit(false);
ps=conn.prepareStatement("update t_news set hits=hits+1 where id=?");
for(int i=0;i<CountCache.list.size();i++){
CountBean cb=(CountBean)CountCache.list.getFirst();
CountCache.list.removeFirst();
ps.setInt(1, cb.getCountId());
ps.executeUpdate();⑴
//ps.addBatch();⑵
}
//int [] counts = ps.executeBatch();⑶
conn.commit();
}catch(Exception e){
e.printStackTrace();
} finally{
try{
if(ps!=null) {
ps.clearParameters();
ps.close();
ps=null;
}
}catch(SQLException e){}
DBUtils.closeConnection(conn);
}
}
public long getLast(){
return lastExecuteTime;
}
public void run(){
long now = System.currentTimeMillis();
if ((now - lastExecuteTime) > executeSep) {
//System.out.print("lastExecuteTime:"+lastExecuteTime);
//System.out.print(" now:"+now+"\n");
// System.out.print(" sep="+(now - lastExecuteTime)+"\n");
lastExecuteTime=now;
executeUpdate();
}
else{
//System.out.print("wait for "+(now - lastExecuteTime)+" seconds:"+"\n");
}
}
}
//注:如果你的数据库驱动支持批处理,那么可以将⑵,⑶标记的代码前的注释去掉,同时在代码⑴前加上注释
类写好了,下面是在JSP中如下调用。
<%
CountBean cb=new CountBean();
cb.setCountId(Integer.parseInt(request.getParameter("cid")));
CountCache.add(cb);
out.print(CountCache.list.size()+"<br>");
CountControl c=new CountControl();
c.run();
out.print(CountCache.list.size()+"<br>");
%>
资料引用:http://www.knowsky.com/341058.html
分享到:
相关推荐
- **知书网 (http://font.knowsky.com/)**:提供大量中文字体资源,可用于PPT设计。 - **好字体网 (http://www.goodfont.net/)**:提供各类中英文艺术字体下载。 - **字体之家 (http://ziti.cndesign.com/)**:专注...
存储过程入门与提高 什么是存储过程呢? 定义: 将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储...资料引用:http://www.knowsky.com/2951.html
JSP片段缓存 内容缓存是Web应用中最普通的优化技术之一,例如,可以使用一个自定义地jsp标签——我们将之命名为<jc:cache>——由<jc:cache>和</jc:cache>将每一...资料引用:http://www.knowsky.com/396839.html
一款自用天气APP。...GitHub地址:https://github.com/CupsterHub/KnowSky 网盘下载,链接:https://pan.baidu.com/s/17F9EWceCjWpZTbaFBJYX8g密码:stot 包含定位、推送、AI语音、数据可视化、UI体验等
KnowSky知道天空 (http://www.knowsky.com/) - **特点**:专注于IT技术培训和在线教育,提供多种编程语言的学习课程。 - **适用人群**:适合希望系统学习并提升编程技能的学员。 - **推荐理由**:KnowSky是一个专业...
在C#中编写多线程应用程序,简单!_www_knowsky_com.htm在C#中编写多线程应用程序,简单!_www_knowsky_com.htm在C#中编写多线程应用程序,简单!_www_knowsky_com.htm
访问官方提供的下载地址:[http://code.knowsky.com/down/5626.html](http://code.knowsky.com/down/5626.html),下载最新版本的cximage源码包。建议选择稳定的版本以避免潜在的兼容性问题。 ##### 2. 解压缩并编译...
Jsp&Servelet 学习笔记(4)_JSP教程_www_knowsky_com.htm
- **www.knowsky.com.txt**:可能是某个网站的示例或教程链接,用于参考和学习JSP流量统计的实现。 - **动态网站制作指南.url**:可能是一个指向详细教程或指南的快捷方式,帮助深入理解动态网站开发。 - **JSP...
<script src="http://count.knowsky.com/count2/count.asp?id=65224&sx=1&ys=26" language="JavaScript" charset="gb2312"></script> ``` **收藏代码**: ```html <img src="../images/jrsc.gif" width="15" height...
- [Knowsky教程](http://www.knowsky.com/3397.html) 通过上述内容,我们可以清晰地了解到如何使用`System.Data.SqlClient`来连接SQL Server,并了解了连接字符串中各个参数的意义和作用。这对于实际开发工作来说是...
JSP实例_www_knowsky_com.htm`文档,详细介绍了如何在实际项目中使用JSpsmartUpload,包括创建上传页面、编写Servlet处理逻辑、以及配置参数等步骤,是学习和使用JSpsmartUpload的一个很好的参考资料。 总结,JSp...
### 数据库引擎运行详解 ...- [数据库服务启动教程](http://www.knowsky.com/537104.html) 以上内容涵盖了从理论到实践的全过程,希望能够帮助读者更好地理解和掌握如何运行数据库引擎的相关知识。
- `www.knowsky.com.txt`: 可能是一个链接到相关教程或资源的文本文件。 - `源码下载.txt`: 提供了获取源代码的额外信息或者下载链接。 - `www.pudn.com.txt`: 同样可能是指向相关资源或讨论区的链接。 - `动态网站...
2. **www.knowsky.com.txt**:这个文件可能包含了一个链接或者引用,指向一个网站www.knowsky.com,该网站可能提供了更多关于JSP或者聊天室项目的教程、参考资料或者示例代码。开发者或学习者可以借此扩展他们的知识...
1. "www.knowsky.com.txt" - 这可能是一个链接或资源的文本文件,可能指向有关JSP和BBS开发的相关教程或论坛,帮助用户进一步学习。 2. "安装说明.txt" - 提供了部署和运行这个JSP BBS系统的步骤,包括可能的环境...
1. "www.knowsky.com.txt"可能是一个链接或说明文档,指向了有关该留言本的更多信息或者开发者的网站。 2. "源码下载.txt"很可能包含了源代码的下载链接或者安装指南,对于学习和理解JSP及MySQL如何集成在实际项目中...
最近有个朋友离开IT行业二年的朋友说要实现用程序向某个网站的页面上传数据,他是意思...//创建对某个网站页面的请求HttpWebRequest myRequest = (HttpWebRequest )WebRequest.Create(“http://www.knowsky.com/a.asp