网站缓存数据实时更新的实现
2011-11-28 07:47
330 查看
一个网站的实现不可避免的需要处理大量的内存数据,这大多都出于网站性能的考虑和解决I/O瓶颈问题,如JavaEye网站的首页排名数据和博客频 道的排名等数据,都进行了缓存处理,而且并非是实时的,特别是首页的排名数据几乎是一天才会更新一次的,同样,QQ等门户网站也存在大量静态化内存数据, 所以一个网站缓存的处理是至关重要的,并且好的架构需要做到代码无侵入性,也就是说内存的更新,日志的记录等操作都应该是“切面”处理,在我后来的网站开 发中,我一般都会定义一个缓存类,如下:
Java代码
并且会自己实现对象的排序接口,如最热门的话题,可能是按话题对象的某几个属性的权重分配来实现的,类似代码如下:
Java代码
缓存的切面更新一般我喜欢使用Spring AOP,简单而实用,一般需求都能满足,Aspect语法比较复杂,没时间看,呵呵
Java代码
这样,最近登录和最新注册用户的缓存数据都会按自定义排序规则进行实时的缓存更新了,不知道这样的实时缓存处理对于大并发量的网站是否能满足要求,没有进行过性能测试!慎用!!!
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]); } } }
这样,最近登录和最新注册用户的缓存数据都会按自定义排序规则进行实时的缓存更新了,不知道这样的实时缓存处理对于大并发量的网站是否能满足要求,没有进行过性能测试!慎用!!!
相关文章推荐
- java实现的highcharts与ajax结合动态实时获取数据更新图表
- 让网站真正实现实时更新的Realtime技术,不用刷新网站、没有延时性
- rsync+Inotify实现数据的实时同步更新
- 使用 JavaScript 将网站后台的数据变化实时更新到前端-【知乎总结】
- android中的websocket 应用 websocket 在实际的应用中不仅仅能做聊天应用,还可以利用websocket长连接保持数据的实时更新以及信息的推送。 websocket 的实现的
- rsync+inotify实现数据的实时同步更新
- 安装布署rsync+Inotify实现数据的实时同步更新
- mybatis缓存与数据实时更新
- rsync与inotify集成实现数据实时同步更新
- 如何实现DataGridView实时更新数据
- rsync+inotify实现数据的实时同步更新
- spring整合ehcache注解实现查询缓存,并实现实时缓存更新或删除
- 用CacheDependency 实现xml文件与缓存数据同步更新
- centos6 完全测试 rsync+Inotify实现数据的实时同步更新
- destoon 分类的单函数实现 数据的添加 删除 和 更新 缓存!
- 烂泥:rsync与inotify集成实现数据实时同步更新
- 根据 Mavlink 协议串口通信实现数据的实时更新并用折线图显示
- CacheDependency 实现xml文件与缓存数据同步更新
- 项目实战之中小网站数据缓存的设计与实现