博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate缓存机制简述 (转)
阅读量:4697 次
发布时间:2019-06-09

本文共 1442 字,大约阅读时间需要 4 分钟。

感谢:http://blog.csdn.net/ramln1989/article/details/5528445

--------------------------------------------------------------------------

缓存的作用主要用来提高性能,可以简单地理解成一个Map。使用缓存涉及到三个操作:把数据放入缓存(put)、从缓存中获取数据(get)、删除缓存中的无效数据(remove)。

 

一级缓存Session共享(生命周期很短,一般在一个Http请求内):

       save、update、saveOrUpdate、load、get、list、iterate、lock这些方法都会将对象放入一级缓存中,一级缓存不能控制缓存的数量,所以要注意大批量操作数据时可能造成的内存溢出,可以用evict、clear方法清除缓存中的内容。

 

二级缓存SessionFactory共享:

         实现为可插拔,通过修改cache.provider.class参数来改变。

Hibernate内置了对EhCache、OSCache、TreeCache、SwarmCache的支持,可以通过实现CacheProvider和Cache接口来加入Hibernate不支持的缓存实现。

         在hibernate.cfg.xml中加入:

<property name=“cache.use_second_level_cache”>true</property>(默认为true)

<property name=“cache.provider_class”>org.hibernate.cache.OSCacheProvider</property>

<class-cache class=“classname” usage=“read-only”/>

或在映射文件的class元素中加入子元素:

<cache usage=“read-write”>

其中usage的取值范围为:read-only、read-write、nonstrict-read-write、transactional。

         Session的save()方法(这个方法不适合native生成方式的主键)、update、saveOrUpdate、list、iterator、get、load以及Query、Criteria都会填充二级缓存,但只有(没有打开查询缓存时)Session的iterator、get、load会从二级缓存中取数据(iterator可能存在N+1次查询)。

         Query、Criteria(查询缓存)由于命中率较低,所以Hibernate缺省时关闭;修改cache.use_query_cache为true打开对查询的缓存,并且调用query.setCacheable(true)criteria.setCacheable(true)

         SessionFactory中提供了evictXXX()方法用来清除缓存中的内容。

         统计信息打开generate_statistics,用sessionFactory.getStatistics()来获取统计信息。

 

分布式缓存和中央缓存

 

使用缓存的条件:

        读取大于修改;

        数据量不能超过内存容量;

        对数据要有独享的控制;

        可以容忍出现无效数据。

 

转载于:https://www.cnblogs.com/wql025/p/4943297.html

你可能感兴趣的文章
mini2440 U-boot 编译
查看>>
学习ThreadLocal
查看>>
在 Visual Studio 调试器中指定符号 (.pdb) 和源文件
查看>>
直接量
查看>>
leetcode 115. 不同的子序列(Distinct Subsequences)
查看>>
三元表达式
查看>>
Oauth支持的5类 grant_type 及说明
查看>>
客户端第一天学习的相关知识
查看>>
LeetCode - Same Tree
查看>>
Python dict get items pop update
查看>>
[置顶] 程序员必知(二):位图(bitmap)
查看>>
130242014036-(2)-体验敏捷开发
查看>>
constexpr
查看>>
Nginx 流量和连接数限制
查看>>
课堂作业1
查看>>
IE8/9 本地预览上传图片
查看>>
Summary of CRM 2011 plug-in
查看>>
Eclipse+Maven环境下java.lang.OutOfMemoryError: PermGen space及其解决方法
查看>>
安全漏洞之Java
查看>>
Oracle 组函数count()
查看>>