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

严格vs NonStrict NHibernate缓存并发策略

名词解释

  • 严格(Strict):在使用NHibernate时,如果配置了严格级别的缓存策略,当多个会话同时访问一个对象时可能会引发异常,因为这可能会导致同一对象的缓存多次更新,产生重复的缓存内容,从而导致错误(例如:StaleStateException)。严格锁定的最大优点是确保缓存不会受到其他并发会话的影响。
  • 非严格(NonStrict):在使用NHibernate时,如果配置了非严格级别的缓存策略,当多个会话同时访问一个对象时,允许并发访问和更新此对象的缓存,从而避免缓存冲突。这意味着非严格策略可以支持更灵活的并发性,同时避免异常的发生。

分类

  • 缓存策略
  • 并发访问

优势

  1. 严格级别: 严格锁在许多情况下可能导致缓存问题,而在一些对数据一致性要求高的场景下,非严格策略更能防止缓存冲突。
  2. 并发度: 严格级别可以更好地支持对单笔数据的并发访问和更新,而非严格级别在支持更灵活的场景同时也能节省资源。

应用场景

  1. 高并发读写: 需要同时频繁读写数据的场景。
  2. 对数据强一致保证: 要求严格数据一致性的应用。
  3. 资源敏感: 对额外资源占用敏感,如:数据库连接或应用程序资源。
  4. 数据处理逻辑简单: 不需要复杂的缓存管理和维护策略。

推荐的腾讯云相关产品

  1. 腾讯云Cassandra集群服务:用于分布式存储解决方案,提供高可扩展性、高性能和高度的数据一致性。
  2. 腾讯云Memcached托管服务:内存中的分布式缓存,可用来缓存数据,通过分布式部署来提高系统性能。

产品介绍链接地址:

  1. 腾讯云Cassandra集群服务
  2. 腾讯云Memcached托管服务
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

并发请求的缓存设计策略

1.为何需要缓存? 在高并发请求时,为何我们频繁提到缓存技术?最直接的原因是,目前磁盘IO和网络IO相对于内存IO的成百上千倍的性能劣势。...高并发的时候,压力一下被放大十几倍,redis响应、网络响应必然会变慢。...4.浅谈缓存的那些坑 缓存很有用,但是缓存用不好也会埋很多坑: 缓存穿透 缓存穿透是说收到了一个请求,但是该请求缓存里没有,只能去数据库里查询,然后放进缓存。...解决思路要么是分治,划分更小的缓存区间,按区间过期;要么是给每个key的过期时间加个随机值,避免同时过期,达到错峰刷新缓存的目的。 缓存刷新 说到刷新缓存,其实也有坑的。...总之,想要做好高并发系统的缓存,就要考虑到各种边角情况,小心设计,任何细小的疏忽都可能导致系统崩溃。

85430

Redis高并发请求的缓存设计策略

并发请求的缓存设计策略 前几天,我司出了个篓子。...1.为何需要缓存? 在高并发请求时,为何我们频繁提到缓存技术?最直接的原因是,目前磁盘IO和网络IO相对于内存IO的成百上千倍的性能劣势。...通过将高频使用的数据存在离cpu更近的位置,以减少数据传输时间,从而提高处理效率,这就是缓存的意义。 2.在哪里用缓存? 一切地方。...: 浏览器会缓存页面的元素,这样在重复访问网页时,就避开了要从互联网上下载数据(例如大图片) web服务会把静态的东西提前部署在CDN上,这也是一种缓存 数据库会缓存查询,所以同一条查询第二次就是要比第一次快...高并发的时候,压力一下被放大十几倍,redis响应、网络响应必然会变慢。

36510

并发存储优化篇:诸多策略缓存为王

对高并发的系统来说,将造成大量的等待。 高并发,大量请求的访问行为被阻塞,会造成什么后果? 对于服务来说,大量超时会使服务器处于不可用的状态。该台机器会触发熔断。...除此之外,还有锁竞争缓存命中率等异常场景也会导致服务异常。 如果单库单表的极限存在,分库分表等优化策略也只能缓解,不会根除 为了避免上述情况,缓存的使用就非常有必要了。...灵感来源于ConcurrentHashMap,但具有更丰富的元素失效策略,功能没有ehcache齐全,如只支持jvm内存,但比较轻量简洁。...发生这种踩踏的底层原因是对缓存这类公共资源拼抢,那么,就把公共资源加锁,消除并发拼抢。...这样,就不会发生大量并发请求同时操作底层存储的情况。

49740

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

在实体上配置@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 并指定缓存并发策略。...ehcache的四种缓存并发策略如下: read-write (读写型) 提供Read Committed事务隔离级别 在非集群的环境中适用 适用经常被读,很少修改的数据 可以防止脏读 更新缓存的时候会锁定缓存中的数据...nonstrict-read-write (非严格读写型) 适用极少被修改,偶尔允许脏读的数据(两个事务同时修改数据的情况很少见) 不保证缓存和数据库中数据的一致性 为缓存数据设置很短的过期时间,从而尽量避免脏读...不锁定缓存中的数据 read-only (只读型) 适用从来不会被修改的数据(如参考数据) 在此模式下,如果对数据进行更新操作,会有异常 事务隔离级别低,并发性能高 在集群环境中也能完美运作 @Entity...(“queryCacheRegion”); //设置查询缓存区域(数据过期策略) query.list(); Query Cache只是在特定的条件下才会发挥作用,而且要求相当严格: (1) 完全相同的

63420

从 Bitmap 到布隆过滤器,再到高并发缓存设计策略

但是,事无完美,在高并发环境下,所有的case都会极端化,如果这是一个十分庞大的集合(给这个庞大一个具体的值吧,一个亿),简单的一个hash map,不考虑链表所需的指针内存空间,一亿个int类型的整数...高并发缓存设计策略 why cache?? 如果读者是一个计算机专业的同学,cache这个词应该是能达到让耳朵起茧的出现频次。...前面讲了大半截的算法理论,为了防止读者犯困,直接进入下半部分主题,高并发缓存设计。...缓存雪崩问题 缓存雪崩发生于在某个时间点,缓存同时失效,例如缓存设置了失效时间,这会联动的导致大量缓存击穿问题。 加分布式锁是一种解决方案,只有拿到锁的请求才能访问database。...预热数据,分散地设置失效时间,这样可以减少缓存雪崩发生的概率。 提高缓存可用性,cache的单点一样是会是缓存雪崩的隐患,大部分缓存中间件都提供高可用架构,如redis的主从+哨兵架构。

34930

从bitmap到布隆过滤器,再到高并发缓存设计策略

但是,事无完美,在高并发环境下,所有的case都会极端化,如果这是一个十分庞大的集合(给这个庞大一个具体的值吧,一个亿),简单的一个hash map,不考虑链表所需的指针内存空间,一亿个int类型的整数...高并发缓存设计策略 why cache?? 如果读者是一个计算机专业的同学,cache这个词应该是能达到让耳朵起茧的出现频次。...前面讲了大半截的算法理论,为了防止读者犯困,直接进入下半部分主题,高并发缓存设计。...缓存雪崩问题 缓存雪崩发生于在某个时间点,缓存同时失效,例如缓存设置了失效时间,这会联动的导致大量缓存击穿问题。 加分布式锁是一种解决方案,只有拿到锁的请求才能访问database。...预热数据,分散地设置失效时间,这样可以减少缓存雪崩发生的概率。 提高缓存可用性,cache的单点一样是会是缓存雪崩的隐患,大部分缓存中间件都提供高可用架构,如redis的主从+哨兵架构。

13310

Hibernate二级缓存(二)

缓存策略:Hibernate提供了多种缓存策略可用于控制二级缓存的行为和缓存数据的更新。以下是一些常用的缓存策略:Read-Only(只读):对于只读数据,可以使用该策略。...这样可以提供最佳的性能,因为不需要处理缓存的更新和失效。Read-Write(读写):对于经常被读取和修改的数据,可以使用该策略。它会在数据被修改时更新缓存,并且在需要时将修改后的数据刷新到数据库中。...Nonstrict-Read-Write(非严格读写):该策略在数据更新时不会立即更新缓存,而是在缓存失效或下一次读取时才更新。这样可以提供更好的性能,但会带来一定的数据不一致性风险。...Transactional(事务性):该策略缓存的更新和数据库的修改绑定在同一个事务中,确保缓存和数据库的一致性。这样可以提供最高级别的数据一致性,但会带来更多的开销。...示例使用Read-Write策略的配置:org.hibernate.cache.ehcache.EhCacheRegionFactory

22140

【高并发】面试官:说说缓存最关心的问题?有哪些类型?回收策略和算法?

作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。...缓存回收策略 缓存的回收策略总体上来说包含:基于空间的回收策略、基于容量(空间)的回收策略、基于时间的回收策略和基于对象引用的回收策略。 ?...基于空间 基于空间指缓存设置了存储空间,如设置为10MB,当达到存储空间上限时,按照一定的策略移除数据。...基于容量 基于容量指缓存设置了最大大小,当缓存的条目超过最大大小时,按照一定的策略移除旧数据。...回收算法 使用基于空间和基于容量的缓存会使用一定的策略移除旧数据,通常包含:FIFO算法、LRU算法和LFU算法。 ?

36910

hibernate二级缓存作用、配置

在通常情况下会将具有以下特征的数据放入到二级缓存中: ● 很少被修改的数据。 ● 不是很重要的数据,允许出现偶尔并发的数据。 ● 不会被并发访问的数据。 ● 常量数据。...但是,可以通过设置hibernate.cache.provider_class属性,指定其他的缓存策略,该缓存策略必须实现org.hibernate.cache.CacheProvider接口。...-- 设置该持久化类的二级缓存并发访问策略 read-only read-write nonstrict-read-write transactional--> <class name..., 1); //如果修改将报错,只读缓存不允许修改 //farm.setName("aaa"); ● NONSTRICT_READ_WRITE:实体非严格读/写缓存 允许更新,更新后缓存失效...class="cn.java.test.model.FarmModel"/> 和实体并发策略有相同含义

88020

Fluent NHibernate之旅(三)-- 继承

经过了“开篇”和“简单映射”两篇文章,相信大家对Fluent NHibernate 有了一定的了解了,FluentNHibernate实际就是对 NHibernate 映射的一定扩展,我们能完全利用强类型...、泛型、Lambde表达式等等Vs、Framework等特性简单完成映射工作,同时也能让我们学习NHibernate的映射方式,一举夺得,这么好玩的东东,有理由不继续完成这个系列吗?...从这一篇开始,我们将使用Fluent NHibernate RC 1.0 版来进行演示,先前的代码,我会另外进行说明 继承 在OOP中,继承作为OO中重要的特性,如果NHibernate没有对它的支持,...b.Map(p => p.Author); }); 但是RC版本已经不建议我们这样使用,好的做法是把子类映射区分开来,等一下你会知道,第一种策略和第二种策略都会采用这样的方式来进行映射...总结 这次说了一下继承的映射方式,其实很早就写好了,正好遇到Fluent NHibernate发布了RC版,所以用了一些时间去学习了下,总的来说,这次升级呢非常好,可能会存在更多的bug,但不影响我们的正常使用

64480

加速你的Hibernate引擎(下)

* 4.6.2绑定参数 vs.字符串拼接 既可以使用绑定参数构造HQL的WHERE子句,也可以使用字符串拼接的方法,该决定对性能会有一定影响。...针对并发缓存访问,有三种实现模式: 针对“read-only”的只读模式。 无论是锁还是事务都没影响,因为缓存自数据从数据库加载后就不会改变。...针对“read-write”和“nonstrict-read-write”的非事务感知(non-transaction-aware)读写模式。 对缓存的更新发生在数据库事务完成后。...如果你的数据读很多或者很少有并发缓存访问和更新,那么可以使用“nonstrict-read-write”策略。感谢它的轻量级“拉”更新策略,它通常是性能第二好的策略。...如果你的数据是又读又写的,那么使用“read-write”策略。这通常是性能倒数第二的策略,因为它要求有缓存锁,缓存集群中使用重量级的“推”更新策略

94030
领券