JSP高访问量下的计数程序

本文介绍了一种在高访问量下优化点击次数更新性能的方法,通过缓存技术及数据库批量处理实现批量更新,有效减轻服务器压力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时要为每一篇文章统计其点击次数,如果每一次浏览都要更新一次库的话,那性能在访问量很大的情况下,服务器的压力就会很大了,比较好一点的方法就是先将要更新的数据缓存起来,然后每隔一段时间再利用数据库的批量处理,批量更新库。源码如下:<wbr><br><br><br><br>   CountBean.java<br><br><br><br><br><br>   package<wbr>com.tot.count;<br><br><br><br><br><br> public<wbr>class<wbr>CountBean<wbr>{<br><br>  private<wbr>String<wbr>countType;<br><br>  int<wbr>countId;<br><br>  <br><br>  public<wbr>CountBean()<wbr>{}<br><br>  public<wbr>void<wbr>setCountType(String<wbr>countTypes){<br><br>   this.countType=countTypes;<br><br>  }<br><br>  public<wbr>void<wbr>setCountId(int<wbr>countIds){<br><br>   this.countId=countIds;<br><br>  }<br><br>  public<wbr>String<wbr>getCountType(){<br><br>   return<wbr>countType;<br><br>  }<br><br>  public<wbr>int<wbr>getCountId(){<br><br>   return<wbr>countId;<br><br>  }<br><br> }<br><br>   CountCache.java<br><br><br><br><br><br><br><br> package<wbr>com.tot.count;<br><br> import<wbr>java.util.*;<br><br><br><br> public<wbr>class<wbr>CountCache<wbr>{<br><br>  public<wbr>static<wbr>LinkedList<wbr>list=new<wbr>LinkedList();<wbr><br><br>  <br><br>  public<wbr>CountCache()<wbr>{}<br><br>  public<wbr>static<wbr>void<wbr>add(CountBean<wbr>cb){<br><br>   if(cb!=null){<br><br>    list.add(cb);<br><br>   }<br><br>  }<br><br> }<br><br><br><br>  CountControl.java<br><br><br><br>  <br><br><br><br> package<wbr>com.tot.count;<br><br> import<wbr>tot.db.DBUtils;<br><br> import<wbr>java.sql.*;<br><br><br><br> public<wbr>class<wbr>CountControl{<wbr><br><br>  private<wbr>static<wbr>long<wbr>lastExecuteTime=0;//上次更新时间 <br><br>  private<wbr>static<wbr>long<wbr>executeSep=60000;//定义更新间隔时间,单位毫秒<br><br>  <br><br>  public<wbr>CountControl()<wbr>{}<br><br>  public<wbr>synchronized<wbr>void<wbr>executeUpdate(){<br><br>   Connection<wbr>conn=null;<br><br>   PreparedStatement<wbr>ps=null;<br><br>   try{<br><br>    conn<wbr>=<wbr>DBUtils.getConnection();<wbr><br><br>    conn.setAutoCommit(false);<br><br>    ps=conn.prepareStatement("update<wbr>t_news<wbr>set<wbr>hits=hits+1<wbr>where<wbr>id=?");<br><br>    for(int<wbr>i=0;i<CountCache.list.size();i++){<br><br>     CountBean<wbr>cb=(CountBean)CountCache.list.getFirst();<br><br>     CountCache.list.removeFirst();<wbr><br><br>     ps.setInt(1,<wbr>cb.getCountId());<br><br>     ps.executeUpdate();⑴<br><br>     //ps.addBatch();⑵<br><br>    }<br><br>    //int<wbr>[]<wbr>counts<wbr>=<wbr>ps.executeBatch();⑶<br><br>    conn.commit();<br><br>   }catch(Exception<wbr>e){<br><br>    e.printStackTrace();<br><br>   }<wbr>finally{<br><br>   try{<br><br>    if(ps!=null)<wbr>{<br><br>     ps.clearParameters();<br><br> ps.close();<br><br> ps=null;<br><br>   }<br><br>  }catch(SQLException<wbr>e){}<br><br>  DBUtils.closeConnection(conn);<br><br>  }<br><br> }<br><br> public<wbr>long<wbr>getLast(){<br><br>  return<wbr>lastExecuteTime;<br><br> }<br><br> public<wbr>void<wbr>run(){<br><br>  long<wbr>now<wbr>=<wbr>System.currentTimeMillis();<br><br>  if<wbr>((now<wbr>-<wbr>lastExecuteTime)<wbr>><wbr>executeSep)<wbr>{<br><br>   //System.out.print("lastExecuteTime:"+lastExecuteTime);<br><br>   //System.out.print("<wbr>now:"+now+"\n");<br><br>   //<wbr>System.out.print("<wbr>sep="+(now<wbr>-<wbr>lastExecuteTime)+"\n");<br><br>   lastExecuteTime=now;<br><br>   executeUpdate();<br><br>  }<br><br>  else{<br><br>   //System.out.print("wait<wbr>for<wbr>"+(now<wbr>-<wbr>lastExecuteTime)+"<wbr>seconds:"+"\n");<br><br>  }<br><br> }<br><br> }<br><br> //注:如果你的数据库驱动支持批处理,那么可以将⑵,⑶标记的代码前的注释去掉,同时在代码⑴前加上注释<br><br>   类写好了,下面是在JSP中如下调用。<br><br><br><br> <%<br><br> CountBean<wbr>cb=new<wbr>CountBean();<br><br> cb.setCountId(Integer.parseInt(request.getParameter("cid")));<br><br> CountCache.add(cb);<br><br> out.print(CountCache.list.size()+"<br>");<br><br> CountControl<wbr>c=new<wbr>CountControl();<br><br> c.run();<br><br> out.print(CountCache.list.size()+"<br>");<br><br> %><br><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值