基于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还是有差距,在读写比较大的对象(如集合)有效率优势。
分享到:
相关推荐
webots月球车仿真
内容概要:本文提供了关于2025年美国大学生数学建模竞赛的重要时间点安排以及竞赛的具体细节介绍。文中明确了从报名到最终结果发布的所有时间节点,详细列出了两种不同类型的竞赛题目特点,即传统的连续性和离散性问题和涉及数据科学技术的题目的特点。同时规定了参赛队伍构成形式、论文要求及评审标准,并提及了对工具使用的具体限制条件以及对于学术诚信的要求——强调独立解决问题的重要性。此外还简述了此次赛事所提供的多个层次获奖可能性的情况介绍。 适用人群:对数学应用有兴趣的大四本科生或者研究生;准备参加2025年度数学建模国际大赛的学生。 使用场景及目标:帮助想要参赛的同学提前规划自己的备考周期,在有限的时间内最大化提升自身的竞争力;确保选手了解完整的参赛规则避免不必要的失误导致成绩受损。 其他说明:该竞赛是一项非常具有挑战性的活动,它不仅考验了参赛者的专业知识水平,还需要他们展示出色的跨学科合作能力。因此参与者应该尽早开始准备,充分考虑各个方面的因素,如组建团队、收集资料和练习旧试题等。
2025年最新康复医学概论考试题库与答案.docx
Move Class.html
C标准库源码
2025检验类之临床医学检验技术(士)真题库附答案.pptx
C标准库源码
C标准库源码
Selva Assignment Class tank problem.pptx
C标准库源码
基于二维四值元胞自动机和混沌系统的图像加密算法.pdf
CST闪电间接效应研究.pdf
### 智慧人防解决方案:科技赋能,守护安全 智慧人防解决方案通过整合军队、政府和社会资源,构建了一个集预警报知、指挥控制、防护救援、综合保障于一体的智能化系统。该方案依托物联网、大数据、GIS与BIM等技术,实现了对人防工程、战备物资、设备设施的全面监控与管理。通过智能监测、可视化展示、远程维护等功能,智慧人防不仅提升了人防设施的运行效率,还确保了设备的安全性和可靠性。例如,系统能够实时监测人防工程的给排水、通风、消防等设施,精准定位异常情况,确保设备始终处于最佳状态。这种“智慧化”的管理模式,不仅提高了人防系统的应急响应能力,还为战时和日常的防护救援提供了强有力的技术支撑。 ### 人防宣传教育与应急指挥:沉浸式体验与高效调度 智慧人防解决方案在人防宣传教育方面,突破了传统的展板宣传模式,引入了VR交互、移动App、微信公众号等现代化手段,打造了沉浸式的防空防灾体验平台。通过模拟空袭疏散、核武器袭击、火灾逃生等场景,市民可以在虚拟环境中学习和掌握应急技能,提升自我保护意识。此外,智慧人防还构建了应急指挥调度系统,实现了从预防、启动、处置到分析的全流程管理。系统通过视频监控、广播系统、手持终端等设备,快速获取现场信息,实时上报并指挥调度,确保突发事件能够迅速得到有效处置。这种“一键式”警报推送和逃生指示功能,不仅提高了应急响应的效率,还增强了公众的安全感。 ### 信用体系与协同监管:构建透明、高效的人防生态 智慧人防解决方案还引入了人防行业信用体系,通过公示系统、协同监管平台等工具,实现了对企业、个人和培训机构的全方位信用管理。系统支持企业信息查询、信用修复、联合惩戒等功能,确保人防行业的透明度和规范性。例如,企业可以通过平台公示年报和即时信息,公众可以查询企业的信用记录,政府部门则可以通过协同监管平台进行实时监控和数据分析。这种信用体系的建立,不仅提升了人防行业的整体管理水平,还为社会公众提供了更加安全、可靠的服务保障。通过科技手段与信用管理的结合,智慧人防解决方案为构建高效、透明的人防生态奠定了坚实基础。
【技术分享】Python中URL处理的常见问题及解决方案,值得收藏!.docx
C标准库源码
C标准库源码
康复医学考试题及答案.docx
Python完整程序-Pandas提取指定数据并保存在原Excel工作簿中,含有完整的源码
IndoorLocation-master
基于APF的空管安全绩效评估模型.pdf