参考文章:
http://www.doc88.com/p-70821145680.html
http://www.doc88.com/p-18360796408.html
http://www.doc88.com/p-39322208084.html
http://www.doc88.com/p-04069488148.html
http://topmanopensource.iteye.com/blog/450059
基于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还是有差距,在读写比较大的对象(如集合)有效率优势。
一直在关注javaeye,但长期在潜水。javaeye改版后功能强多了,而且最近工作也变动了,接触了一些新东西,以后还是坚持在这里记录些东西吧,也非常看好javaeye的发展。
这些天在设计SNA的架构,接触了一些远程缓存、集群、session复制等的东西,以前做企业应用的时候感觉作用不大,现在设计面对internet的系统架构时就非常有用了,而且在调试后看到压力测试的情况还是比较爽的。
在缓存的选择上有过很多的思考,虽然说memcached结合java在序列化上性能不怎么样,不过也没有更好的集群环境下的缓存解决方案了,就选择了memcached。本来计划等公司买的服务器到位装个linux再来研究memcached,但这两天在找到了一个windows下的Memcached版本,就动手开始调整现有的框架了。
windows下的Server端很简单,不用安装,双击运行后默认服务端口是11211,没有试着去更改端口,因为反正以后会用unix版本,到时再记录安装步骤。下载客户端的java API包,接口非常简单,参考API手册上就有现成的例子。
目标,对旧框架缓存部分进行改造:
1、缓存工具类
2、hibernate的provider
3、用缓存实现session机制
今天先研究研究缓存工具类的改造,在旧框架中部分函数用了ehcache对执行结果进行了缓存处理,现在目标是提供一个缓存工具类,在配置文件中配置使用哪种缓存(memcached或ehcached),使其它程序对具体的缓存不依赖,同时使用AOP方式来对方法执行结果进行缓存。
首先是工具类的实现:
在Spring中配置
<!-- EhCache Manager -->
<bean id="cacheManager"
class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation">
<value>classpath:ehcache.xml</value>
</property>
</bean>
<bean id="localCache"
class="org.springframework.cache.ehcache.EhCacheFactoryBean">
<property name="cacheManager" ref="cacheManager" />
<property name="cacheName"
value="×××.cache.LOCAL_CACHE" />
</bean>
<bean id="cacheService"
class="×××.core.cache.CacheService" init-method="init" destroy-method="destory">
<property name="cacheServerList" value="${cache.servers}"/>
<property name="cacheServerWeights" value="${cache.cacheServerWeights}"/>
<property name="cacheCluster" value="${cache.cluster}"/>
<property name="localCache" ref="localCache"/>
</bean>
分享到:
相关推荐
JAVA缓存研究之剖析Jive的缓存机制JAVA缓存研究之剖析Jive的缓存机制
移动边缘网络中计算迁移与内容缓存研究综述_张开元.pdf
1. MySQL缓存概述 2. MySQL缓存研究内容与目的 3. MySQL缓存研究方法 4. MySQL缓存研究报告 5. MySQL缓存实验报告 6. 课题研究结论 7. 总结
大规模无线通信网络移动边缘计算和缓存研究.docx
众核处理器的共享一级指令缓存研究.pdf
移动边缘网络中计算迁移与内容缓存研究综述.pdf
安全技术-网络信息-LTE核心网络中协作式视频缓存研究.pdf
针对低电压下cache硬错误和软错误概率提高导致cache不能正常...基于EEMBC测试基准的实验结果表明,该设计可以在590 mV电压下正常运行,与该领域最新研究 VS-ECC相比,降低了23.6%的纠错码存储信息量,性能提高5.9%。
缓存技术作为提高系统性能的重要手段一直是研究的热点。随着网络存储等新技术的出现,存储的层次越来越复杂,原有的简单缓存管理技术已经不合适 日趋复杂的应用。频率和时间综合考虑的缓存替换方法、多级 缓存的替换...
网络技术-网络基础
因特网中日益增长的内容获取需求促使学术界提出了多种以信息为中心的未来...分析了缓存新特征对ICN研究带来的挑战;从多方面重点阐述了ICN缓存的优化方法,详细分析对比了不同缓存策略;指出了未来研究方向并总结全文。
简要介绍了路由器中缓存管理的发展过程,列举了缓存管理一些最主流的算法,并对它们的性质、优缺点作了较为深刻的比较研究。最后利用试验仿真对四种缓存管理算法进行了缓存利用率和分组丢失率方面的评价,并对缓存...
Hibernate是一种面向Java环境的ORM工具。系统地分析了Hibernate的缓存结构,并描述了二级缓存的查询过程、缓存策略;同时总结了二级缓存使用中的一些限制,以及使用二级缓存的优化策略。
GeoServer瓦片缓存机制研究 GIS数据组织结构
suqid 缓存服务器整理的相关内容,可以参考的。适合于centos7系统的
为提高P2P空间矢量数据索引网络的性能,在已有混合结构P2P空间索引网络的基础上,引入缓存机制,并提出了一种新的面向多图层的空间矢量数据缓存更新策略。该策略针对空间矢量数据多图层特性,综合考虑图层优先级以及...
NDN缓存机制研究,曾潇,高泽华,目前日益增长的用户规模和用户需求给互联网带来了巨大的挑战,内容本身越来越成为用户需求的中心,而且CDN,P2P等内容共享业务给网
基于Ad hoc网络的链路缓存算法研究,高彦,张薇,在Ad hoc网络中,缓存技术是制约按需路由协议性能的主要因素,怎样组织缓存结构并及时更新缓存信息是缓存技术目前的主要研究内容。
WWW缓存机制的研究与应用,李琳琳,熊前兴,针对现有www系统请求响应方式的局限性,提出了一种基于动态页面静态化的缓存解决方案,该方案在实现动态页面静态化时,其引擎的触
GeoServer瓦片缓存机制研究_阳华