查询缓存,就是在内存建立空间用来保存上次查询结果,下次再进行同样的查询时,就不用再从数据库查找结果,大大的提高速度。
不过内存和数据库的数据没有完全同步,所以不适用于多个程序共同访问同一数据表的的情况;这样的话,数据表的数据已经被其他程序修改,有可能内存里存在的数据是旧数据,这就是所谓的脏数据。
而且Hibernate和数据库的查询缓存,在对一个数据表记录进行修改时,会把有关这个表的全部查询缓存清空,以保证减少脏读问题。
所以查询缓存只适用于非多服务器同时访问的数据库,而且读取大大多于修改操作的数据表上
hibernate的缓存包括session的缓存和sessionfactory的缓存,其中sessionfactory的缓存又可以分为两类:内置缓存和外置缓存。session的缓存是内置的,不能被卸载,也被称为hibernate的第一级缓存。sessionfactory的内置缓存和session的缓存在实现方式上比较相似,前者是sessionfactory对象的一些集合属性包含的数据,后者是指session的一些集合属性包含的数据。sessionfactory的内置缓存中存放了映射元数据和预定义sql语句,映射元数据是映射文件中数据的拷贝,而预定义sql语句是在hibernate初始化阶段根据映射元数据推导出来,sessionfactory的内置缓存是只读的,应用程序不能修改缓存中的映射元数据和预定义sql语句,因此sessionfactory不需要进行内置缓存与映射文件的同步。sessionfactory的外置缓存是一个可配置的插件。在默认情况下,sessionfactory不会启用这个插件。外置缓存的数据是数据库数据的拷贝,外置缓存的介质可以是内存或者硬盘。sessionfactory的外置缓存也被称为hibernate的第二级缓存。
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....