JSP高访问量下的计数程序

194阅读 0评论2008-09-09 akQFQW2geCOxgJG
分类:

有时要为每一篇文章统计其点击次数,如果每一次浏览都要更新一次库的话,那性能在访问量很大的情况下,的压力就会很大了,比较好一点的方法就是先将要更新的数据缓存起来,然后每隔一段时间再利用数据库的批量处理,批量更新库。源码如下:

    半分钟更新一次计数.

    count包中三个*.java文件

    1.CountBean.java

    package count;

    public class CountBean {  private String countType;

     int countId;

     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;  } }

    2 CountCache.java

    package count;

    import java.util.*;

    public class CountCache {  public static LinkedList list = new LinkedList();

     public CountCache() {  }

     public static void add(CountBean cb) {   if (cb != null) {    list.add(cb);   }  }

    } 3.CountControl.java

    package count;

    import java.sql.*; import com.pp.db.*;

    public class CountControl {  private static long lastExecuteTime = 0;// 上次更新时间

     private static long executeSep = 30000;// 定义更新间隔时间,单位毫秒 半分钟

     public CountControl()
{
  }

     public synchronized void executeUpdate()
{
   Connection conn = null;
   PreparedStatement ps = null;
   try
{
    conn = new DBConnection().getConn();
    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();
   }

[1]  

【责编:landy】

--------------------next---------------------

上一篇:jsp 实现在线人数统计
下一篇:JSP和Servlet的关系浅谈