`
kidiaoer
  • 浏览: 818601 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

项目缓存方案总结

阅读更多

项目缓存方案总结

一、 hibernate的二级缓存
       如果开启了二级缓存,hibernate在执行任何一次查询的之后,都会把得到的结果集放到缓存中,缓存结构可以看作是一个hash table,key是数据库记录的id,value是id对应的pojo对象。当用户根据id查询对象的时候(load、iterator办法),会首先在缓存中查找,如果没有找到再发起数据库查询。但是如果使用hql发起查询(find, query办法)则不会利用二级缓存,而是直接从数据库获得数据,但是它会把得到的数据放到二级缓存备用。也就是说,基于hql的查询,对二级缓存是只写不读的。

       针对二级缓存的工作原理,采用iterator取代list来提高二级缓存命中率的想法是不可行的。Iterator的工作方法是根据检索条件从数据库中选取所有目标数据的id,然后用这些id一个一个的到二级缓存里面做检索,如果找到就直接加载,找不到就向数据库做查询。因此假如iterator检索100条数据的话,最好情况是100%全部命中,最坏情况是0%命中,执行101条sql把所有数据选出来。而list虽然不利用缓存,但是它只会发起1 条sql取得所有数据。在合理利用分页查询的情况下,list整体效率高于iterator。

       二级缓存的失效机制由hibernate控制,当某条数据被修改之后,hibernate会根据它的id去做缓存失效操作。基于此机制,如果数据表不是被hibernate独占(比如同时使用JDBC或者ado等),那么二级缓存无法得到有效控制。

       由于hibernate的缓存接口很灵活,cacheprovider可以方便的切换,因此支持cluster环境不是大问题,通过使用swarmcache、jboss cache等支持分布式的缓存方案,可以实现。但是问题在于:
1、 分布式缓存本身成本偏高(比如使用同步复制模式的jboss cache)
2、 分布式环境通常对事务控制有较高规定,而目前的开源缓存方案对事务缓存(transaction cache)支持得不够好。当jta事务发生会滚,缓存的最后更新结果很难预料。这一点会带来很大的部署成本,甚至得不偿失。

结论:不应把hibernate二级缓存作为优化的主要手段,一般情况下建议不要使用。

缘故如下:
1、 项目的DAO类大部分是从1.0升级过来,由于1.0采用的是 hibernate 2.1,所以在批量删除数据的时候采用了native sql的方法。虽然2.0已经完全升级到 hibernate3.2,支持hibernate原生的批量删改,但是由于hibernate批量操作的性能不如sql,而且为了兼容1.0的dao 类,所以不少地方保留了sql操作。哪些数据表是单纯被hibernate独占无法统计,而且随着将来业务的成长可能会有很大变数。因此不宜采用二级缓存。
2、 针对系统业务来说,基于id检索的二级缓存命中率极为有限,hql被大部份采用,二级缓存对性能的提升很有限。
3、 hibernate 3.0 在做批量修改、批量更新的时候,是不会同步更新二级缓存的,该问题在hibernate 3.2中是否仍然存在尚不确定。

分享到:
评论

相关推荐

    ehcache项目缓存技术

    Ehcache作为一款强大的缓存解决方案,为Java开发者提供了高效的数据缓存手段,能够有效提升系统性能,减轻数据库压力。理解并熟练运用Ehcache,是优化企业级应用性能的关键一步。在实际项目中,根据业务需求选择合适...

    apicloud 缓存方案 js代码

    总结来说,APICloud中的缓存方案主要是通过JavaScript操作Web Storage和IndexedDB,实现JSON数据的本地存储。结合合理的缓存策略,可以显著提升应用的性能和用户体验。在实际项目中,根据需求选择合适的存储方式,并...

    vue项目中实现缓存的最佳方案详解

    一句话总结一下: pageAList->pageADetail->pageAList, 缓存pageAList, 同时该视频的收藏状态如果发生变化需要更新, 其他页面->pageAList, pageAList不缓存 在网上找了很多别人的方法,都不满足我们的需求 然后...

    memcached完全剖析ehcache memcached redis 缓存技术总结

    **标题与描述解析** 标题“memcached完全剖析ehcache memcached redis 缓存技术总结”表明,这篇内容将深入...通过深入学习这些知识点,读者将能够更好地理解并选择适合自己项目的缓存解决方案,从而提升系统性能。

    HTML,JSP页面缓存的解决方案

    - 如果项目使用了MVC框架(如Spring MVC),可以利用框架提供的拦截器或过滤器来全局禁止缓存: ```java @WebFilter("/*") public class NoCacheFilter implements Filter { @Override public void doFilter...

    oscache缓存使用总结.doc

    OSCache 是一个广泛使用的开源缓存解决方案,尤其在Java应用中,它被JBoss, Hibernate, Spring等知名框架所支持。其主要特点是配置简单,适用于页面级别的缓存管理。以下是对OSCache配置和使用过程的详细说明: 1. ...

    OSCache 缓存对象的总结

    OSCache 是一款开源的缓存解决方案,主要用于Java应用程序,它为开发者提供了高效的缓存机制,以提高应用性能和响应速度。这篇博客文章“OSCache 缓存对象的总结”主要探讨了OSCache在实际开发中的应用及其核心特性...

    android项目设计方案

    ### Android项目设计方案知识点详解 #### 一、技术概述与学习内容 在开发Android项目时,会涉及多种技术和工具。为了帮助大家更好地理解这些技术并应用于实际项目中,本篇文章将详细介绍以下关键技术点: 1. **...

    分布式缓存与JavaEE

    分布式缓存是现代大型互联网应用中不可或缺的一部分,尤其是在JavaEE环境下。它主要用来解决数据库的高并发读写压力,...在实际项目中,根据业务需求选择合适的分布式缓存方案,并不断调整和优化,才能充分发挥其优势。

    redis缓存分享,包含redis和redis测试的项目test

    总结来说,这个分享内容涵盖了Redis的基础知识、作为缓存的使用方法以及测试实践,旨在帮助读者理解和掌握如何在实际项目中有效地运用Redis进行数据缓存,提高系统效率。通过学习这些内容,你可以进一步提升自己的IT...

    项目优化之Ehcache页面缓存

    Ehcache是由Terracotta公司开发的开源缓存解决方案,它支持内存和磁盘存储,并且可以与其他Java应用程序服务器集成。Ehcache的核心特性包括:高效的缓存管理、内存和硬盘的二级缓存、缓存过期策略以及分布式缓存支持...

    Java系统分布式缓存PPT

    这可能包括但不限于缓存穿透、缓存雪崩、缓存击穿等问题的解决方案,以及如何利用缓存预热、缓存更新策略(如Write-Behind和Write-Through)来提升系统稳定性。此外,还可能涉及缓存的容量管理和数据淘汰策略,例如...

    Coherence企业级缓存

    总结,Oracle Coherence为企业级应用提供了强大的缓存解决方案,通过深入理解和充分利用其特性,开发者能够构建出高性能、高可用的分布式系统。无论是快速启动项目,还是进行复杂的缓存管理,Coherence都能提供有力...

    缓存机制demo

    总结起来,本项目“缓存机制demo”旨在教授如何在ASP.NET环境中实现高效的缓存策略,特别是针对aspx页面的缓存,以优化网站性能。通过学习和实践,开发者可以更好地理解和运用缓存技术,为大型网站的高并发场景提供...

    Java缓存技术深入了解

    总结,Java缓存技术是提升系统性能的重要手段,理解其原理和使用方式,结合合适的缓存库,可以有效地优化应用程序的性能,降低对数据库的压力。在实际项目中,应根据业务需求选择合适的缓存策略和工具,确保系统的...

    Unity项目热更新方案性能分析总结

    本文将深入探讨“Unity项目热更新方案性能分析总结”这一主题,为开发者提供宝贵的实践经验和性能优化建议。 一、Unity热更新基础 Unity热更新的基本原理是通过分离游戏的核心逻辑和资源,使得部分代码可以在游戏...

    nutz 缓存

    总结来说,Nutz框架的缓存机制提供了一套全面的解决方案,包括DAO层的自动缓存、多种缓存策略、自定义缓存实现以及丰富的缓存事件,帮助开发者优化系统性能,提升用户体验。通过学习和应用Nutz缓存,开发者可以更好...

    oscache缓存技术

    osCache是一款广泛应用于Java应用程序中的开源缓存解决方案,由OpenSymphony团队开发。它提供了一种高效、可扩展的方式来管理应用程序中的数据缓存,从而提高系统的性能和响应速度。osCache的核心功能包括缓存对象、...

Global site tag (gtag.js) - Google Analytics