关键字: j2ee项目中缓存机制研究
基于B/S结构中的缓存方式,可以在不同的层次上进行。笔者比较粗略地从以下几方面就行分析:
(1)浏览器缓存
(2)单台服务器缓存(hibernate、ehcache等)
(3)分布式系统中的缓存(memcache、xmemcached)
1 浏览器缓存
本博前面一段时间在《Web前端优化》系列中分析了浏览器的工作行为,其中包括了一些浏览器缓存的因素。便于大家查看,现将文档列于下:
WEB前端优化之内容篇
Web 前端优化之CSS 篇
Web 前端优化之 JavaScript
Web前端优化之Server
Web前端优化之图象
Web前端优化之Cookie
其中较多的参考了《高性能网站建设指南》一书.
另外推荐大家看一篇博文:《J2EE:web开发中的缓存问题的研究》http://www.diybl.com/course/3_program/java/javashl/20081130/152856.html。
2单台服务器缓存
单台服务器的缓存机制现在有很多,主要有两种方式:一是采用自编程序实现、二是用现在开源的框架。具体的缓存机制按物理载体又可以分为内存级别的缓存和磁盘级别的缓存。按并发策略又可以分为:事务型(Transactional)策略、读写型(read-write)策略、非严格读写型(nonstrict-read-write)策略和只读型策略(read-only)。各种策略的详情这里也不多说了,感兴趣的可以再在网上找一下相关资料。下面分析一下这一级别常用的一些缓存机制。
2.1 hibernate+ehcache
Hibernate 中提供了两级Cache,第一级别的缓存是Session级别的缓存,它是属于事务范围的缓存。这一级别的缓存由hibernate管理的,一般情况下无需进行干预;第二级别的缓存是SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存。这一级别的缓存可以进行配置和更改,并且可以动态加载和卸载。
Hibernate还为查询结果提供了一个查询缓存,它依赖于第二级缓存。
一级缓存
当应用程序调用Session的save()、update()、 savaeOrUpdate()、get()或load(),以及调用查询接口的list()、iterate()或filter()方法时,如果在 Session缓存中还不存在相应的对象,Hibernate就会把该对象加入到第一级缓存中。当清理缓存时,Hibernate会根据缓存中对象的状态变化来同步更新数据库。
Session为应用程序提供了两个管理缓存的方法:
evict(Object obj):从缓存中清除参数指定的持久化对象。
clear():清空缓存中所有持久化对象。
二级缓存
Hibernate的二级缓存策略的一般过程:
1) 条件查询的时候,总是发出一条select * from table_name where …. (选择所有字段)这样的SQL语句查询数据库,一次获得所有的数据对象。
2) 把获得的所有数据对象根据ID放入到第二级缓存中。
3) 当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把结果按照ID放入到缓存。
4) 删除、更新、增加数据的时候,同时更新缓存。
Hibernate的二级缓存策略,是针对于ID查询的缓存策略,对于条件查询则毫无作用。为此,Hibernate提供了针对条件查询的Query Cache。
至于详细的配置方式,大家可以上网去找吧。
2.2 自写原理
自己写cache无非也是把数据存于内存或者磁盘的某个地方,但是自己写需要考虑到很多方面,如缓存更新策略、缓存访问策略等等,也都不是非常容易的。这里主要是利用Spring的相关机制实现缓存。
原理如下:
1、 在开源工具如ehcache的基础上编写缓存工具类,实现缓存需要的基本操作
2、 然后实现函数的AOP拦截类,用来在函数执行前返回缓存内容
3、 配置Spring的AOP及其他的一些配置。
详细见《memcached的使用(一)》http://marc.iteye.com/blog/28700
3分布式系统中的缓存
许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大影响。
这时就该memcached大显身手了。memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。、
目前,Java领域出现了xmemcached,它是基于java nio实现的memcached客户端API。
实际上是基于我实现的一个简单nio框架 http://code.google.com/p/yanf4j/的基础上实现的(目前是基于yanf4j 0.52),核心代码不超过1000行,序列化机制直接挪用spymemcached的Transcoder。
性能方面,在读写简单类型上比之spymemcached还是有差距,在读写比较大的对象(如集合)有效率优势。
分享到:
相关推荐
的特性包括高级线程管理、虚拟主机支持、数据缓存等,非常适合于研究J2EE中的Web容器机制。 #### JDBC方向 ##### HypersonicSQL HypersonicSQL是一个纯Java编写的开源关系型数据库管理系统,虽然它并非完全兼容...
在IT行业中,J2EE(Java 2 Platform, Enterprise Edition)是用于构建企业级应用程序的平台,它提供了服务器端的编程模型和环境。本实例源代码着重于一个经典的开发框架集成,即Struts2.0、Hibernate和Spring的组合...
7. **MVC设计模式**:在J2EE项目中如何应用Model-View-Controller模式。 8. **部署与测试**:学习如何在应用服务器(如Tomcat、Glassfish)上部署应用,并进行单元测试和集成测试。 9. **安全控制**:了解J2EE的安全...
这个压缩包文件“《J2EE案例开发》源代码”包含的是一系列J2EE项目实践的源代码,是学习和理解J2EE技术体系及其实际应用的良好资源。 J2EE的核心在于它的分层架构,主要包括以下层次: 1. 客户端层(Client Layer...
《深入解析J2EE项目源码:DigitalCampus数字校园》 在信息技术高速发展的今天,数字校园系统已经成为教育信息化的重要组成部分。"DigitalCampus数字校园"是一个基于J2EE技术平台构建的综合管理系统,旨在提升学校...
它支持事务管理、缓存机制,还有强大的查询语言HQL(Hibernate Query Language),极大地提高了开发效率。 **Spring** 是一个全面的企业级应用开发框架,其核心是依赖注入(DI)和面向切面编程(AOP)。Spring可以...
这个J2EE个人博客系统项目不仅是一个实际的Web应用,还是学习和研究J2EE技术、Web开发流程和项目管理的优秀实践案例。通过深入分析和实践,开发者可以提升自己在企业级应用开发中的技能和经验。
在本文中,我们将深入探讨“基于J2EE的Web Service研究及构建”,理解J2EE如何与Web Service相结合,实现企业级应用间的无缝通信。 1. **J2EE简介** Java 2 Enterprise Edition (J2EE) 是一个用于开发和部署多层、...
- **重点内容**:MVC模式、拦截器模式、工厂模式等在J2EE项目中的具体应用。 - **EJB设计模式**:针对EJB开发过程中的常见问题提供解决方案。 - **重点内容**:EJB生命周期管理、状态模式的应用等。 ### 开源框架...
5. **性能优化**:通过预编译标签和缓存机制,提高页面渲染速度,减少服务器压力。 6. **可复用性**:标签库中的组件可以在多个项目中重复使用,提高开发效率。 7. **维护性**:将逻辑从JSP页面移至标签库,使得...
这些特性在J2EE架构中得以体现,例如,通过集群和负载均衡实现高可用,通过数据库优化和缓存策略提升性能,通过加密和访问控制保障安全性。 3. **Web层**: Web层通常由Servlet和JSP组成,负责处理HTTP请求和返回...
### 基于Struts和Hibernate的J2EE架构的研究 #### 1. J2EE架构概述 J2EE(Java 2 Platform Enterprise Edition)是由Sun Microsystems推出的一种用于构建企业级应用的平台标准。该平台支持多层分布式应用,并且为...
【标题】"基于J2EE的网络物流系统"是一...通过分析源码和阅读论文,我们可以深入了解J2EE在实际项目中的应用,学习如何将理论知识转化为解决实际问题的工具,这对于理解企业级软件开发流程和提升技术能力都非常有价值。
8. **安全性**:J2EE提供了多种安全机制,如角色基础的访问控制(RBAC)、SSL/TLS加密、认证与授权等,以保护系统的数据安全和用户隐私。 9. **性能优化**:对于大型企业系统,性能优化是关键。可以通过缓存策略、...
通过分析和研究这个源码,开发者可以深入理解如何在实际项目中运用J2EE技术栈,包括Servlet、JSP、JDBC、EJB、Spring、Hibernate等,以及如何设计和实现一个功能完善的电子商务系统。 【标签】"j2ee在线购物网实例...
深入研究JMS(Java Message Service)、JPA(Java Persistence API)、CDI(Contexts and Dependency Injection)、JSF(JavaServer Faces)等技术,以及安全、缓存、负载均衡等高级话题。 ### 12. 实战项目 最后,...
2. 使用缓存机制减少数据库访问。 3. 利用负载均衡和集群技术提升系统性能和可用性。 4. 适当使用轻量级框架,如Spring,以降低复杂性。 综上所述,“基于J2EE多层架构的web应用研究”文档详细阐述了如何利用J2EE...
《基于J2EE的电子档案管理系统研究与开发(树状结构)》是一个针对毕业设计项目的详细探讨,旨在构建一个能够高效管理和检索电子档案的系统。本文将深入剖析J2EE平台在实现这样的系统中的核心作用,以及如何利用树状...
这个毕业设计项目是学习和实践这些概念的实例,对于初学者或开发者来说,是一个深入理解Java J2EE在电子商务场景中应用的宝贵资源。通过分析和研究这个项目,不仅可以掌握相关技术,还能了解实际开发流程和团队协作...
- 本书还包含了一些具体的案例研究,展示了如何在实际项目中应用J2EE技术栈。 #### 三、技术细节与应用场景 - **Web层**:主要处理HTTP请求和响应,通常由Servlets和JSP组成。 - **业务逻辑层**:实现应用程序的...