网站缓存数据实时更新的实现

一个网站的实现不可避免的需要处理大量的内存数据,这大多都出于网站性能的考虑和解决I/O瓶颈问题,如JavaEye网站的首页排名数据和博客频 道的排名等数据,都进行了缓存处理,而且并非是实时的,特别是首页的排名数据几乎是一天才会更新一次的,同样,QQ等门户网站也存在大量静态化内存数据, 所以一个网站缓存的处理是至关重要的,并且好的架构需要做到代码无侵入性,也就是说内存的更新,日志的记录等操作都应该是“切面”处理,在我后来的网站开 发中,我一般都会定义一个缓存类,如下:

Java代码

public static LinkedList<Login> regRecentUser=new LinkedList(); //最近注册人员
 public static LinkedList<Login> regLoginedUser=new LinkedList();//最近登录人员
 public static List<Topic> hotTopic=new ArrayList();//最热发表话题

并且会自己实现对象的排序接口,如最热门的话题,可能是按话题对象的某几个属性的权重分配来实现的,类似代码如下:

Java代码

public class TopicCompare implements Comparator{
    //热门的话题与顶的数目和评论的数目有关,权重分配比例为4:6 
 public int compare(Object arg0, Object arg1) {
 if((arg0 instanceof Topic) && (arg1 instanceof Topic)){
  double y=((Topic)arg0).getAgreeit()*0.4 + ((Topic)arg0).getCmtnum()*0.6;
  double h=((Topic)arg1).getAgreeit()*0.4 + ((Topic)arg1).getCmtnum()*0.6;
  if(y==h) return 0;
  else if(y>h) return 1;
  else return -1;
 }
 return 0;
 }

}

缓存的切面更新一般我喜欢使用Spring AOP,简单而实用,一般需求都能满足,Aspect语法比较复杂,没时间看,呵呵

Java代码

import java.lang.reflect.Method;

import org.springframework.aop.AfterReturningAdvice;

import com.common.cache.WebCacheUtils;
import com.cxlh.dao.hibernate.Login;

public class LoginAdvice implements AfterReturningAdvice {
 public void afterReturning(Object returnValue, Method method, Object[] args,
  Object target) throws Throwable {
 if(method.getName().equalsIgnoreCase("checkUserLogin") && !returnValue.toString().equalsIgnoreCase("null")){
  //最近登录用户缓存更新
  System.out.println("=======update login cache");
  WebCacheUtils.addRegLoginedUser((Login)returnValue);
 }else if(method.getName().equalsIgnoreCase("addUser")){
  //更新最新注册用户缓存
  System.out.println("=======update add user cache");
  WebCacheUtils.addRegRecentUser((Login)args[0]);
 }
 }
}

这样,最近登录和最新注册用户的缓存数据都会按自定义排序规则进行实时的缓存更新了,不知道这样的实时缓存处理对于大并发量的网站是否能满足要求,没有进行过性能测试!慎用!!!

转载于:https://www.cnblogs.com/yonge/archive/2011/11/28/2265723.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值