(一)Hibernate的二级缓存策略的一般过程如下:
1) 条件查询的时候,总是发出一条select * from table_name where …. (选择所有字段)这样的SQL语句查询数据库,一次获得所有的数据对象。
2) 把获得的所有数据对象根据ID放入到第二级缓存中。
3) 当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把结果按照ID放入到缓存。
4) 删除、更新、增加数据的时候,同时更新缓存。
Hibernate的二级缓存策略,是针对于ID查询的缓存策略,对于条件查询则毫无作用。为此,Hibernate提供了针对条件查询的Query Cache。
(二)什么样的数据适合存放到第二级缓存中?
1 很少被修改的数据
2 不是很重要的数据,允许出现偶尔并发的数据
3 不会被并发访问的数据
4 参考数据,指的是供应用参考的常量数据,它的实例数目有限,它的实例会被许多其他类的实例引用,实例极少或者从来不会被修改。
(三)不适合存放到第二级缓存的数据?
1 经常被修改的数据
2 财务数据,绝对不允许出现并发
3 与其他应用共享的数据。
原文摘自
http://rujingzhang.iteye.com/blog/219487
我们项目中A表的情况是这样的 :
表A的数据只有当天添加的数据是有效的,
如果没有当天的数据
那么选择“最近的”数据作为参考显示给用户,
用户可以在页面上点击某按钮获得当天数据,此时,系统访问XX服务器,得到数据并向A表插入一条数据,然后显示用户。
这是向A表insert数据唯一入口,并且A表的数据不会被update和delete
我现在想给A表中的数据缓存,并且DAO中的所有查询方法都控制为只查询3天之内的数据(查询3天之前的数据没有意义)
我的理解是这样的
(二)什么样的数据适合存放到第二级缓存中?
1 很少被修改的数据
会比较频繁的insert,但不会update,不知道算不算很少被修改
2 不是很重要的数据,允许出现偶尔并发的数据
没有 update 操作,所以不存在并发
3 不会被并发访问的数据
没有 update 操作,所以不存在并发
4 参考数据,指的是供应用参考的常量数据,它的实例数目有限,它的实例会被许多其他类的实例引用,实例极少或者从来不会被修改。
在整个应用中A表的数据使用较为频繁,每天都会有些数据失效,并且随时都会插入新数据
由于以前没有做过并发和缓存方面的工作,不知道A表的情况是否适合做2级缓存,做了缓存后会带来哪些问题,希望大家给点建议
希望投新手帖,隐藏帖的大哥们也能给点意见
分享到:
相关推荐
不同的SqlSession之间的缓存数据区域是互相不影响的,也就是说一级缓存只能作用在同一个SqlSession中,不同的SqlSession中的缓存是互相不能读取的。 一级缓存的工作原理是:用户发起查询请求,SqlSession先去缓存中...
Hibernate 是一个流行的对象关系映射(ORM)框架,它提供了数据缓存机制以优化数据库访问性能。缓存机制分为一级缓存和二级缓存,两者都有助于减少对物理数据库的直接访问,从而提高应用程序的运行效率。 一级缓存...
**hibernate一级缓存、二级缓存和查询缓存** 在Java的持久化框架Hibernate中,缓存机制是提高应用程序性能的关键要素。缓存能够减少数据库的访问次数,提高数据读取速度,并且在一定程度上降低了系统的负载。本文将...
通过以上步骤和注意事项,我们可以将Redis有效地整合到Mybatis的二级缓存中,实现高效的数据缓存,提高系统的响应速度和用户体验。同时,结合业务需求和系统负载情况,不断调整优化缓存策略,以达到最佳的性能效果。
2. 如果数据不在二级缓存中,MyBatis会继续查询数据库并将结果存入一级缓存。 3. 当SqlSession提交事务时,一级缓存中的数据会被复制到二级缓存中。 4. 如果其他SqlSession执行相同的查询,会先查看二级缓存,找到则...
Redis是一款基于键值对的高性能NoSQL数据库,常用于做数据缓存。它支持丰富的数据结构(如字符串、哈希、列表、集合等),并且具备高速读写性能,能够提供更强大的缓存能力。 在"springMybatis+redis三级缓存框架...
二级缓存的生命周期更长,但在并发环境下需要谨慎使用,因为它可能会引发数据不一致的问题。 ### 开启缓存 1. **一级缓存**:一级缓存是默认开启的,无需额外设置。 2. **二级缓存**:在 MyBatis 的配置文件中,...
Hibernate的一级缓存和二级缓存是提高数据访问效率的重要手段,它们各自承担着不同的角色,合理使用可以显著提升应用性能。然而,缓存的使用也需要谨慎,需要根据具体业务场景选择合适的缓存策略,并关注可能带来的...
L1缓存分为数据缓存(Data Cache)和指令缓存(Instruction Cache),分别用于存储计算过程中的数据和执行指令。由于L1缓存的接近性,它能够显著减少CPU等待数据的时间,提高处理器的执行效率。在多核CPU中,每个...
使用二级缓存需要注意的是,由于数据可能存在多个Session之间共享,因此需要处理并发问题,确保数据的一致性。此外,对于经常更新的数据,可能需要更频繁地刷新二级缓存,以防止读取到过期数据。 查询缓存是...
启用一级缓存是默认的,只要通过Session执行数据操作,Hibernate就会自动使用一级缓存。而二级缓存则需要在配置文件中明确指定,可以针对单个类或集合粒度进行配置。对于读多写少的实体,启用二级缓存能显著提升性能...
2. 使用 SoftReferences:可以配置 Hibernate 使用软引用(SoftReferences)来管理缓存中的对象,这样在内存不足时,Java 垃圾回收器会自动回收这些对象,平衡缓存和系统资源。 3. 分布式缓存:在多节点环境中,可以...
本篇将深入探讨Hibernate的一级缓存和二级缓存,以及查询缓存的配置和使用。 ### 一级缓存 一级缓存是Hibernate默认提供的缓存,它是Session级别的,每个Hibernate Session都有一个私有的、本地的一级缓存。当我们...
L1缓存分为指令缓存(用于存储处理器即将执行的指令)和数据缓存(用于存储运算所需的数据)。由于L1缓存非常靠近处理器,因此访问速度极快,但其容量通常只有几十到几百KB。 L2缓存(二级缓存)相比于L1缓存更大,...
二级缓存虽然能提高性能,但也存在一定的风险,如缓存穿透(查询不存在的数据导致缓存为空)、缓存雪崩(大量缓存同一时间失效导致请求涌向数据库)等问题。因此,在实际应用中,应结合业务场景谨慎使用,并采取相应...
然而,一级缓存并不能解决所有问题,因为它的生命周期受限于事务,导致跨事务的数据共享困难。为了解决这个问题,Hibernate引入了二级缓存。二级缓存是进程级或者集群级的,它可以跨多个会话和事务共享数据,从而...
2. 缓存失效:合理设置缓存过期时间或使用事件驱动的缓存清理机制,确保缓存中的数据与数据库保持同步。 3. 性能调优:根据系统负载和硬件资源,调整缓存大小和并发级别,避免内存溢出。 4. 安全性:不要缓存敏感...
在实际应用中,合理配置和使用缓存能够显著提高应用性能,但需要注意缓存的大小设置、过期策略以及与数据库的同步策略,以防止数据不一致性和内存溢出等问题。 总之,理解并熟练运用Hibernate的一级和二级缓存,...
yii 学习笔记,其中包括数据缓存、缓存组件、缓存过期、缓存依赖的理解及yii2数据缓存的测试代码
在这个主题中,我们将深入探讨ASP.NET数据缓存的原理、使用方法以及优化策略。 1. 缓存的基本概念 缓存是一种存储技术,用于暂时存储经常访问的数据,以便快速获取。在ASP.NET中,数据缓存分为两种主要类型:页面...