百科狗-知识改变命运!
--

spring一级缓存和二级缓存的区别是什么?

桃子1年前 (2023-12-21)阅读数 5#综合百科
文章标签缓存数据

一级缓存:\x0d\就是Session级别的缓存。一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中。\x0d\如果短时间内这个session(一定要同一个session)又做了同一个操作,那么hibernate直接从一级缓存中拿,而不会再去连数据库,取数据。\x0d\它是内置的事务范围的缓存,不能被卸载。\x0d\二级缓存:\x0d\就是SessionFactory级别的缓存。顾名思义,就是查询的时候会把查询结果缓存到二级缓存中。\x0d\如果同一个sessionFactory创建的某个session执行了相同的操作,hibernate就会从二级缓存中拿结果,而不会再去连接数据库。\x0d\这是可选的插件式的缓存,在默认情况下,SessionFactory不会启用这个插件。\x0d\可以在每个类或每个集合的粒度上配置。缓存适配器用于把具体的缓存实现软件与Hibernate集成。\x0d\严格意义上说,SessionFactory缓存分为两类:内置缓存和外置缓存。我们通常意义上说的二级缓存是指外置缓存。\x0d\内置缓存与session级别缓存实现方式相似。前者是SessionFactory对象的一些集合属性包含的数据,后者是指Session的一些集合属性包含的数据\x0d\SessionFactory的内置缓存中存放了映射元数据和预定义SQL语句。\x0d\映射元数据是映射文件中数据的拷贝;\x0d\而预定义SQL语句是在Hibernate初始化阶段根据映射元数据推导出来。\x0d\SessionFactory的内置缓存是只读的,应用程序不能修改缓存中的映射元数据和预定义SQL语句,因此SessionFactory不需要进行内置缓存与映射文件的同步。\x0d\Hibernate的这两级缓存都位于持久化层,存放的都是数据库数据的拷贝。\x0d\缓存的两个特性:\x0d\缓存的范围\x0d\缓存的并发访问策略\x0d\1、缓存的范围\x0d\决定了缓存的生命周期以及可以被谁访问。缓存的范围分为三类。\x0d\事务范围\x0d\进程范围\x0d\集群范围\x0d\注:\x0d\对大多数应用来说,应该慎重地考虑是否需要使用集群范围的缓存,因为访问的速度不一定会比直接访问数据库数据的速度快多少。\x0d\事务范围的缓存是持久化层的第一级缓存,通常它是必需的;进程范围或集群范围的缓存是持久化层的第二级缓存,通常是可选的。\x0d\2、缓存的并发访问策略\x0d\当多个并发的事务同时访问持久化层的缓存的相同数据时,会引起并发问题,必须采用必要的事务隔离措施。\x0d\在进程范围或集群范围的缓存,即第二级缓存,会出现并发问题。\x0d\因此可以设定以下四种类型的并发访问策略,每一种策略对应一种事务隔离级别。\x0d\事务型并发访问策略是事务隔离级别最高,只读型的隔离级别最低。事务隔离级别越高,并发性能就越低。\x0d\A 事务型:仅仅在受管理环境中适用。它提供了Repeatable Read事务隔离级别。\x0d\对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读和不可重复读这类的并发问题。\x0d\B 读写型:提供了Read Committed事务隔离级别。仅仅在非集群的环境中适用。\x0d\对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读这类的并发问题。\x0d\C 非严格读写型:不保证缓存与数据库中数据的一致性。\x0d\如果存在两个事务同时访问缓存中相同数据的可能,必须为该数据配置一个很短的数据过期时间,从而尽量避免脏读。\x0d\对于极少被修改,并且允许偶尔脏读的数据,可以采用这种并发访问策略。\x0d\D 只读型:对于从来不会修改的数据,如参考数据,可以使用这种并发访问策略。\x0d\什么样的数据适合存放到第二级缓存中?\x0d\1、很少被修改的数据\x0d\2、不是很重要的数据,允许出现偶尔并发的数据\x0d\3、不会被并发访问的数据\x0d\4、参考数据\x0d\不适合存放到第二级缓存的数据?\x0d\1、经常被修改的数据\x0d\2、财务数据,绝对不允许出现并发\x0d\3、与其他应用共享的数据。\x0d\Hibernate的二级缓存策略的一般过程如下:\x0d\1) 条件查询的时候,总是发出一条select * from table_name where ?. (选择所有字段)这样的SQL语句查询数据库,一次获得所有的数据对象。\x0d\2) 把获得的所有数据对象根据ID放入到第二级缓存中。\x0d\3) 当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把结果按照ID放入到缓存。\x0d\4) 删除、更新、增加数据的时候,同时更新缓存。\x0d\注:\x0d\Hibernate的二级缓存策略,是针对于ID查询的缓存策略,对于条件查询则毫无作用。为此,Hibernate提供了针对条件查询的Query缓存。\x0d\Query缓存策略的过程如下:\x0d\1) Hibernate首先根据这些信息组成一个Query Key,Query Key包括条件查询的请求一般信息:SQL, SQL需要的参数,记录范围(起始位置rowStart,最大记录个数maxRows),等。\x0d\2) Hibernate根据这个Query Key到Query缓存中查找对应的结果列表。如果存在,那么返回这个结果列表;如果不存在,查询数据库,获取结果列表,把整个结果列表根据Query Key放入到Query缓存中。\x0d\3) Query Key中的SQL涉及到一些表名,如果这些表的任何数据发生修改、删除、增加等操作,这些相关的Query Key都要从缓存中清空。

一级缓存和二级缓存的区别是什么?

一级缓存和二级缓存的区别是什么?

spring一级缓存和二级缓存的区别是什么?

在计算机系统中,缓存是提高系统性能的一种常用技术。一般来说,缓存可以分为一级缓存和二级缓存,它们都是为了加速数据访问而存在的。然而,一级缓存和二级缓存之间有哪些区别呢?

一级缓存是内置于CPU中的高速缓存,也称作L1缓存。CPU从内存中读取数据时,会先在一级缓存中寻找需要的数据,如果一级缓存中已经存有这个数据,那么CPU就可以直接从缓存中获取数据,这样可以大大提高CPU访问速度。一级缓存通常比较小,一般只有几KB~几十KB,但是读写速度非常快,可以达到几百MB/s。

二级缓存是CPU与内存之间的缓存,也称为L2缓存。一般来说,二级缓存的容量比一级缓存大,读写速度也比一级缓存慢一些,一般只有几百KB到几十MB的容量。与一级缓存相比,二级缓存的优势在于可以存储更多的数据,可以减少对内存的访问,提高CPU的访问速度。

在实际应用中,CPU会根据需要来自动地将数据从内存中放入缓存中。当CPU需要读取某个数据时,它会先在一级缓存中查找,如果一级缓存中没有需要的数据,那么CPU就会从二级缓存中查找。当二级缓存中也没有需要的数据时,CPU就会从内存中读取数据,并将这个数据存储到二级缓存中,以备下一次访问。

综上所述,一级缓存和二级缓存都是为了加速CPU的数据访问而存在的,它们在容量、读写速度等方面存在较大的差异。一级缓存比较小,但是存取速度非常快,而二级缓存容量较大,存取速度较慢,但可以存储更多的数据。根据不同的应用场景和需求,我们可以根据实际情况来选择不同的缓存方式。

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)