一个网站的实现不行制止的需要处理惩罚大量的内存数据,这大多都出于网站机能的思量息争决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]);
}
}
}
这样,最近登录和最新注册用户的缓存数据城市按自界说排序法则举办及时的缓存更新了,不知道这样的及时缓存处理惩罚对付大并发量的网站是否能满意要求,没有举办过机能测试!慎用!!!