首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Hibernate中缓存并发的只读与NonRestrict读写

在Hibernate中,缓存并发的只读(READ_ONLY)与NonRestrict读写(NONSTRICT_READ_WRITE)是两种重要的缓存并发策略,它们各自适用于不同的场景,并有着不同的特性和使用方式。以下是对这两种策略的详细解析:

基础概念

  • 只读缓存(READ_ONLY): 在这种策略下,缓存中的数据被标记为只读,不允许进行更新操作。这适用于数据不会被修改的场景,如参考数据等。
  • 非严格读写缓存(NONSTRICT_READ_WRITE): 允许缓存中的数据进行读写操作,但不保证事务之间的数据一致性。这种策略适用于数据更新不频繁的场景,因为它减少了锁的使用,从而可能提高性能。

优势

  • 只读缓存(READ_ONLY):
    • 提供最佳性能,因为缓存的数据不会被更新。
    • 避免写操作,减少并发冲突。
  • 非严格读写缓存(NONSTRICT_READ_WRITE):
    • 允许数据被读写,提高缓存利用率。
    • 适用于数据更新不频繁,允许偶尔脏读的场景。

类型

  • 只读缓存(READ_ONLY)
  • 非严格读写缓存(NONSTRICT_READ_WRITE)

应用场景

  • 只读缓存(READ_ONLY):
    • 适合于数据不会改变的应用场景,如配置信息、静态数据等。
  • 非严格读写缓存(NONSTRICT_READ_WRITE):
    • 适用于数据更新不频繁,但需要缓存以提高查询性能的应用,如用户会话信息、部分业务数据等。

为什么会这样

选择合适的缓存并发策略是为了在不同的使用场景下平衡数据一致性和系统性能。只读缓存确保了数据的安全性,而非严格读写缓存则在保证数据一致性的同时,尽可能地提高了系统的并发处理能力。

如何解决相关问题

  • 数据一致性: 在使用非严格读写策略时,需要注意可能出现的数据不一致问题。可以通过设置较短的缓存过期时间或者使用其他同步机制来解决。
  • 性能优化: 根据应用的具体需求选择合适的缓存策略。例如,对于读多写少的场景,非严格读写策略可以提高性能;而对于需要强一致性的场景,则应选择只读或事务型策略。

通过合理选择和使用Hibernate的缓存并发策略,可以显著提高应用程序的性能和响应速度,同时保证数据的一致性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

hibernate中executeUpdate的缓存问题

介绍: 在开发一个更新部门编号的功能中遇到了一个由hibernate缓存导致的问题,后来发现是由于hibernate的缓存机制所导致,这里记录了一下这个问题及其分析解决方法。...{使用批量更新hibernate中的executeUpdate() } 3.把插入的部门排序更新成插入位置的序号。...问题原因分析: 1 初步分析 首先怀疑执行executeUpdate方法后不会更新到缓存到hibernate的一级缓存中去,所以junit测试的时候拿到的还是原来的缓存对象。...的缓存中对象的,这也情有可原因为executeUpdate操作是可能更新海量数据的。...2 测试用例中获取单个部门id的方法,并没有输出sql语句,所以肯定是从缓存中获取对象的,所以你能理解部门1、部门2的排序还是1、2了吧 。

73420

mongo集群中读写操作与并发

主从读取策略 副本集mongo中,在没有指定读取策略的情况下,默认到primary读取  readPreference  1、含义:  主要控制客户端driver从副本集(Replica Set)读数据的时候如何路由...根据网络距离,就近读取,根据客户端与服务端的PingTime是实现  2、配置secondaryPreferred示例 mongodb+srv://xxx.com?...命令【不是】原子的,upsert 分为两步: 找数据 覆盖数据或插入数据 在使用该功能时,需考虑fifter条件是否作唯一,  在并发下,多个线程或协程同时 upsert 并完成找数据这一步操作,此时这些线程都没有找到数据...collection.createIndex($unique_keys, { backgroud : true, unique : true}),如果不加【unique : true】则为普通索引,解决不了并发重复的问题...事务问题 事务中读操作 mongo在指定读写分离时,即 readPreference=secondaryPreferred或者readPreference=secondary时, 在代码中开启事务时,

10010
  • Hibernate中的一级缓存

    这是因为 Hibernate使用了一级缓存,一级缓存又叫Session缓存 在一个会话的生命期里面,他所用到的数据会使用缓冲的,第一次读的是编号为2的数据记录 第一次读的时候,内存中什么都没有,这时候就要用一条...select语句从数据库中读出一条记录,同时把这些数据放到session的缓存 里面,接下来又要读同样的数据,这时候他就不会再向数据库读取数据,而是向缓存中读取数据。...,放入缓存中,当执行session.evict(gb);语句时,就会把 缓存中的数据移除掉。...“心狠手辣”,不让敌人有丝毫反抗的有生力量…… 这个方法会让缓存中的所有东西清除的干干净净。...,判断缓存中是否缓存在gb2对象。

    45630

    mysql 的读写锁与并发控制

    1.无论何时只要有多个查询在同一时刻修改数据,都会产生并发控制的问题 2.讨论mysql在两个层面,服务器层和存储引擎层,如何并发控制读写 3.举了个mbox邮箱文件的例子,说如果有多个进程同时对mbox...文件写东西,那么在文件的末尾会,交叉混乱的添加,比如进程1写了几行,进程2也写了几行,互相交叉,数据就是错误的了.设计良好的mbox需要加锁,比如进程1锁住了文件,进程2必须等待进程1结束,锁释放才能去写....但是这样的话就不支持并发了,同一时刻只有一个进程可以写数据 4.读取时可能也会有问题,比如一个进程正在读数据,另一个进程同时想去删数据,此时就是不安全的;共享锁叫读锁,排他锁叫写锁 5.读锁是共享的,...它不会阻塞其他读锁;写锁是排他的,它会阻塞其他读锁和写锁;读读不互斥,读写互斥,写写互斥 6.mysql每时每刻都在发生锁定,当某用户在修改数据时,会阻塞其他用户读取该数据 7.mysql中有两种锁粒度...,那几行其他用户不能读和写;其他行没有影响,但是管理锁会消耗资源,innodb 8.使用命令来锁表 unlock tables 解锁所有行 lock tables 表名 read或者write 测试读写

    1.2K30

    Hibernate中的二级缓存 EHCache

    -- 说明:maxElementsInMemory  设置 保存在内存中的缓存对象的最大数量                etemal  设置缓存中对象 是否永远不过期,如果值为true,超过设置被忽略...,缓存对象永远不过期                timeToIdleSeconds   设置缓存中对象在他过期之前的最大空闲时间,单位为秒                timeToLiveSeconds...   设置缓存中对象在他过期之前的最大生存时间 ,单位为秒                overflowToDisk      设置内存中的缓存对象达到maxElementsInMemory限制时,是否将缓存对象保存到硬盘中...-- EHCache二级缓存的策略:       只读缓存          (read-only)       读/写缓存          (read-write)       不严格的读/写缓存      ...这就是利用hibernate的二级缓存, 他在内存中保留了我们要查询的id=2的这条记录,所以当我们再次查询的时候,是直接从缓存中读出来。

    51510

    【Hibernate教程】事务、并发及缓存管理之扫盲篇

    一、事务   在Hibernate中,事务是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。   ...二级缓存是一个可拔插的缓存插件,它是由SessionFactory负责管理。 3、缓存并发访问策略   当多个并发的事务同时访问持久化层中缓存的相同数据时,会引起并发问题,必须采用必要的事务隔离措施。...对于经常被读但很少修改的数据,可以采用这种隔离类型,因为可以防止脏读和不可重复读这类的并发问题。   (2)读写型策略:提供了Read Committed事务隔离级别。仅仅在非集群环境中适用。...对于经常被读但很少修改的数据,可以采用这种隔离类型,因为可以防止脏读并发问题。   (3)非严格读写型策略:不保证缓存与数据库中数据的一致性。...(4)只读型策略:对于从来不会修改的数据,如参考数据,可以使用这种并发访问策略。事务型并发访问策略是事务隔离级别最高,只读型的隔离级别最低。事务隔离级别越高,并发性能就越低。

    45140

    hibernate与mybatis的区别比较_mybatis中

    Mybatis:Mybatis同样也是非常流行的ORM框架,主要着力点在于POJO 与SQL之间的映射关系。...而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。 2.开发难度对比 Hibernate的开发难度要大于Mybatis。...Hibernate与数据库具体的关联都在XML中,所以HQL对具体是用什么数据库并不是很关心。...5.缓存机制比较 相同点:Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,都可以通过实现你自己的缓存或为其他第三方缓存方案,创建适配器来完全覆盖缓存行为。...不同点:Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,然后再在具体的表–对象映射中配置是那种缓存。

    45310

    Java 并发包中的读写锁及其实现分析

    Java 并发包中的读写锁及其实现分析 1....读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得 并发性相比一般的排他锁有了很大提升。 除了保证写操作对读操作的可见性以及并发性的提升之外,读写锁能够简化读写交互场景的编程方式。...假设在程序中定义一个共享的数据结构用作缓存,它大部分时间提供读服务(例如:查询和搜索),而写操作占有的时间很少,但是写操作完成之后的更新需要对后续的读服务可见。...Cache组合了一个非线程安全的HashMap作为缓存的实现,同时使用读写锁的读锁和写锁来保证Cache是线程安全的。...读写锁的实现分析 接下来将分析ReentrantReadWriteLock的实现,主要包括:读写状态的设计、写锁的获取与释放、读锁的获取与释放以及锁降级(以下没有特别说明读写锁均可认为是ReentrantReadWriteLock

    74840

    Java 并发包中的读写锁及其实现分析

    读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得 并发性相比一般的排他锁有了很大提升。 除了保证写操作对读操作的可见性以及并发性的提升之外,读写锁能够简化读写交互场景的编程方式。...假设在程序中定义一个共享的数据结构用作缓存,它大部分时间提供读服务(例如:查询和搜索),而写操作占有的时间很少,但是写操作完成之后的更新需要对后续的读服务可见。...上述示例中,Cache组合了一个非线程安全的HashMap作为缓存的实现,同时使用读写锁的读锁和写锁来保证Cache是线程安全的。...在读操作 get(String key)方法中,需要获取读锁,这使得并发访问该方法时不会被阻塞。...读写锁的实现分析 接下来将分析ReentrantReadWriteLock的实现,主要包括:读写状态的设计、写锁的获取与释放、读锁的获取与释放以及锁降级(以下没有特别说明读写锁均可认为是ReentrantReadWriteLock

    37720

    hibernate二级缓存作用、配置

    SessionFactory的内置缓存是只读的,应用程序不能修改缓存中的映射元数据和预定义SQL语句,因此SessionFactory不需要进行内置缓存与映射文件的同步。...SessionFactory的外置缓存也被称为Hibernate的二级缓存。 Hibernate的二级缓存的实现原理与一级缓存是一样的,也是通过以ID为key的Map来实现对对象的缓存。...在通常情况下会将具有以下特征的数据放入到二级缓存中: ● 很少被修改的数据。 ● 不是很重要的数据,允许出现偶尔并发的数据。 ● 不会被并发访问的数据。 ● 常量数据。...在这里特别要注意的是对放入缓存中的数据不能有第三方的应用对数据进行更改(其中也包括在自己程序中使用其他方式进行数据的修改,例如,JDBC),因为那样Hibernate将不会知道数据已经被修改,也就无法保证缓存中的数据与数据库中数据的一致性...读写缓存和不严格读写缓存在实现上的区别在于,读写缓存更新缓存的时候会把缓存里面的数据换成一个锁 ● TRANSACTIONAL:实体事务缓存 缓存支持事务,发生异常的时候,缓存也能够回滚,只支持

    1K20

    Hibernate二级缓存提升性能(注解方式)

    ehcache的四种缓存并发策略如下: read-write (读写型) 提供Read Committed事务隔离级别 在非集群的环境中适用 适用经常被读,很少修改的数据 可以防止脏读 更新缓存的时候会锁定缓存中的数据...nonstrict-read-write (非严格读写型) 适用极少被修改,偶尔允许脏读的数据(两个事务同时修改数据的情况很少见) 不保证缓存和数据库中数据的一致性 为缓存数据设置很短的过期时间,从而尽量避免脏读...不锁定缓存中的数据 read-only (只读型) 适用从来不会被修改的数据(如参考数据) 在此模式下,如果对数据进行更新操作,会有异常 事务隔离级别低,并发性能高 在集群环境中也能完美运作 @Entity...查询缓存适用于以下场合: (1)在应用程序运行时经常使用的查询语句(参数相同) (2)很少对与查询语句检索到的数据进行插入、删除或更新操作 6、不使用缓存、使用hibernate...下篇文章将会说下Hibernate一级缓存与懒加载,以上内容不正之处,请指正。

    70420

    Postgresql中的MVCC与并发

    MVCC多版本并发控制为数据加上时间戳,读写需要额外的根据自身时间戳与数据时间戳对比,按照既定的规则可以知道这条数据对当前的SQL是否可见。...这两个隔离级别与读已提交不同之处在于: 查询可以看见在事务中第一个非事务控制语句开始时的一个快照,而不是事务中当前语句开始时的快照。...使用时间戳的并发控制 除了使用锁以外,可以使用时间戳的方式保证事务了串行。时间戳方式会为每个事务分配一个时间戳,将这些数值与事务时间戳比较,根据事务的时间戳确保串行调度等价与实际事务调度。...在PG中事务ID可以理解为时间戳(递增、唯一),PG中的MVCC即实现了上述多版本时间戳的串行控制方法,本质上是为了在数据库并发执行事务时,保证整体数据的一致性。...PG中事务ID会持续递增,一个简单的例子,每一个不在事务块中的SQL语句都会自成一个事务,一般写操作与txid_current()会消耗一个事务ID。

    3.9K21

    Hibernate二级缓存配置

    在大并发量的情况下,如果每次程序都需要向数据库直接做查询操作,它们所带来的性能开销是显而易见的,频繁的网络舆,数据库磁盘的读写操作都会大大降低系统的性能。...Hibernate实现了良好的Cache机制,可以借助Hibernate内部的Cache迅速提高系统的数据读取性能。Hibernate中的Cache可分为两层:一级Cache和二级Cache。...在Hibernate中使用EhCache: 1)hibernate.cfg.xml 中增加对二级缓存的配置(maven项目放在resources文件夹下) 的缓存过期时间,否则可能从缓存中读出脏数据。当一些数据极少改变,并且当这些数据和数据库有一部份不量影响不大时,可以使用此策略。   ...因为第二次获取虽然没有从第二个session中拿到缓存,但是从sessionfactory中拿到了Category缓存对象。

    34220

    Hibernate二级缓存的使用「建议收藏」

    通常在 Hibernate 的初始化阶段, Hibernate 会把映射元数据和预定义的 SQL 语句放到 SessionFactory 的缓存中, 映射元数据是映射文件中数据的复制,而预定义 SQL...该内置缓存是只读的. 外置:需要去配置第三方缓存插件(hibernate内部没有二级缓存实现),在默认情况下, SessionFactory不会启用这个缓存插件....二级缓存的并发策略 为了便于记忆,理解二级缓存 事务并发策略对应 事务隔离级别 非严格读写(Nonstrict-read-write) 读写型(Read-write...JBossCache:可作为集群范围内的缓存, 支持 Hibernate 的查询缓存 缓存插件支持的并发访问策略 二级缓存快速入门 1)导入jar包 hibernate 每个版本jar...二级缓存操作 案例一 : 证明二级缓存是存在的与类级别缓冲区的散装数据结构 对于一级缓存来说存储的是对象的地址,而地址引用的是内存中的实体类。

    1.3K10

    Hibernate高级特性 - 二级缓存与一级缓存,结合实际项目中的应用

    简介 在现代的应用开发中,数据库操作频繁是很常见的情况,而频繁的数据库访问可能导致性能瓶颈。为了解决这个问题,Hibernate提供了缓存机制,其中包括一级缓存和二级缓存。...当使用Session从数据库查询实体对象时,Hibernate会将查询结果存储在一级缓存中。...这样,当再次查询相同的实体对象时,Hibernate会首先检查一级缓存中是否存在,如果存在则直接返回缓存中的对象,从而避免了频繁的数据库查询。...当需要从数据库查询数据时,Hibernate首先检查二级缓存中是否存在相应的数据,如果存在则直接返回缓存中的数据。如果缓存中不存在数据,则从数据库中查询并存储在缓存中,以便后续查询时使用。...用户在浏览动态详情时,可能会频繁访问相同的动态及其评论。这就是一个适合使用缓存的场景。 使用缓存优化查询 在这个场景中,我们可以使用一级缓存和二级缓存来优化查询。

    29610

    hibernate 二级缓存「建议收藏」

    它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储源的频率,从而提高应用的运行性能。缓存中的数据是数据存储源中数据的拷贝。...外置缓存中的数据是数据库数据的复制, 外置缓存的物理介质可以是内存或硬盘 使用 Hibernate 的二级缓存 适合放入二级缓存中的数据: 很少被修改 不是很重要的数据, 允许出现偶尔的并发问题...不适合放入二级缓存中的数据: 经常被修改 财务数据, 绝对不允许出现并发问题 与其他应用程序共享的数据 Hibernate 二级缓存的架构 二级缓存的并发访问策略...二级缓存可以设定以下 4 种类型的并发访问策略, 每一种访问策略对应一种事务隔离级别 非严格读写(Nonstrict-read-write): 不保证缓存与数据库中数据的一致性....: EHCache(jar 包和 配置文件), 并编译器配置文件 在 Hibernate 的配置文件中启用二级缓存并指定和 EHCache 对应的缓存适配器 选择需要使用二级缓存的持久化类, 设置它的二级缓存的并发访问策略

    1K20
    领券