hibernate中的三级缓存与加载

首先说JCS;

JCS:指的是java cache system

JCS中是依据对象中的唯一标示进行存储 存储结构为map结构

为什么要说JCS呢,因为hibernate的缓存二级缓存与JCS密切相关,

1.什么是三级缓存呢?

        一级缓存:指的是Session缓存,基于线程的缓存

        二级缓存 指的是SessionFactory的缓存,是基于进程的缓存 (由于SessionFactory的声明周期和程序的声明周期是相同的,并且是单例的)

                 二级缓存又分为内置缓存和外置缓存

                      内置缓存是hibernate中自己编写的

                      外置缓存是hibernate借助第三方插件的缓存

                               外置缓存又分为class缓存和查询缓存

                                       这两种缓存都采用的是map结构,前者的key保存的是sql语句的字符串,value保存的是主键id的集合

                                                                                                   后者的key保存的是id,value保存的是id所对应的某一条记录封装后的对象


       三级缓存 :指的是外置缓存中的查询缓存

                 由于查询缓存依赖于class缓存,所以说三级缓存是基于二级缓存之上的.

 好吧,讲了这么多,缓存相信也讲的很明了了吧,接下来说说数据的加载吧,数据的加载与缓存有关系的,所以先讲述了三级缓存机制

    加载机制分为两类:

                                       一,即时加载  ,

                                                  list方法:发送sql语句,将会返回所有相关的数据,并进行缓存

                                                 get方法,利用对象的id,然后去一级缓存中找,如果有返回,否则去二级缓存中找,如果有返回,否则直接去数据库查找

                                     二.    延时加载(在hibernate中也成为懒加载)

                                                   iterator方法发送sql语句,将会返回所记录的id集合,如果需要查看相应的属性值,则回去二级缓存的class缓存中根据id进行查找,如果没有,                                                 才会去数据库中根据id查找

                                                   load方法 利用对象的id,然后去一级缓存中找,如果有则返回,如果没有,则不再去二级缓存中寻找,默认有,会返回对象的代理对象,如果查                                                   看对象属性的的话,才去二级缓存查找,如果没有再去根据id进行数据库访问


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值