Hibernate的缓存机制

        Hibernate中提供了两级缓存,分别是一级缓存和二级缓存,第一级别的缓存是session级别的缓存,它是属于事务范围的缓存,这一级别的缓存由Hibernate管理,一般情况下无需进行干预;第二级别的缓存是SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存,又可以分为内置缓存和外置缓存,这一级别的缓存可以进行配置和更改,并且可以动态加载和卸载。

一级缓存和二级缓存的含义

        缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。缓存中的数据是对物理数据源中数据的复制,应用程序在运行时从缓存读取数据,在特定的时刻或事件会同步缓存和物理数据源的数据。
        一级缓存是指session的一些集合属性包含的数据。二级缓存的内置缓存中存放了映射元数据和预定义SQL语句,映射元数据是映射文件中数据的复制,而预定义SQL语句是在Hhibernate初始化阶段根据映射元数据推导出来的,二级缓存的内置缓存是只读的,应用程序不能修改缓存中的映射元数据和预定义SQL语句,因此二级缓存不需要进行内置缓存与映射文件的同步。

缓存的使用范围

        缓存的范围决定了缓存的生命周期以及可以被谁访问。缓存的范围分为以下3类。
        1、事务范围:缓存只能被当前事务访问,每个事务都有独自的缓存,缓存内的数据通常采用相互关联的对象形式。
        2、进程范围:缓存被进程内的所有事务共享。这些事务有可能是并发访问缓存,因此必须对缓存采取必要的事务隔离机制。进程范围的缓存可能会存放大量的数据,所以存放的介质可以是内存或硬盘。缓存内的数据既可以是相互关联的对象形式,也可以是对象的松散数据形式。
        3、集群范围:在集群范围中,缓存被一台机器或者多台机器的进程共享。缓存中的数据被复制到集群环境中的每个进程节点,进程间通过远程通信来保证缓存中数据的一致性,缓存中的数据通常采用对象的松散数据形式。

一级缓存和二级缓存的区别

1、存放数据的形式不同:一级缓存的数据是相互关联的持久化对象;二级缓存存放的数据是对象的散装数据。
2、缓存的范围不同:一级缓存范围是事务范围,二级缓存范围是进程范围或集群范围。
3、并发访问策略不同:由于每个事务都拥有单独的一级缓存,所以无需提供并发访问策略;由于二级缓存被同一个进程或集群范围内的所有事务共享,必须提供适当的并发访问策略,来保证特定的事务隔离级别。
4、数据过期策略不同:一级缓存没有提供数据过期策略,二级缓存必须提供数据过期策略,如基于内存的缓存中的对象的最大数目、允许对象处于缓存中的最长时间以及允许对象处于缓存中的最长空间时间等。
5、物理存储介质不同:一级缓存的物理存储介质是内存,二级缓存的物理存储介质是内存和硬盘。
6、缓存的软件实现不同:在Hibernate的一级缓存通过session来实现缓存;Hibernate的二级缓存由第三方提供(即SessionFactory),Hibernate仅提供了缓存适配器(CacheProvider),用于把特定的缓存插件集成到Hibernate中。
7、启用缓存的方式不同:当应用程序通过session接口来执行保存、更新、删除、加载和查询数据库数据的操作时,Hibernate就会启用一级缓存。如果类的实例被经常读但很少被修改,就可以考虑使用第二级缓存。只有为某个类或集合配置了第二级缓存,Hibernate运行时才会把它的实例加入到第二级缓存中。
8、用户管理缓存的方式不同:一级缓存的物理介质为内存,由于内存容量有限,必须通过恰当的检索策略和检索方式来限制加载对象的数目。管理二级缓存主要包括两个方面,一是选择需要使用的第二级缓存的持久类,设置合适的并发访问策略;二是选择缓存适配器,设置合适的数据过期策略。

一级缓存的管理

session为应用程序提供了以下两个管理缓存的方法:
1、evict(Object obj):该方法用于从缓存中清除参数指定的持久化对象。
2、clear():该方法用于清空缓存中所有持久化对象。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值