简介

为了降低应用程序访问我们的数据的时候的频率,提高数据读取的速率。比如计算机中为了缓解CPU和内存之间速度差异而引入的缓存是一样的道理。Hibernate同样对缓存进行了支持,使得程序的运行效率得到了提高。

在Hibernate中,同一个session查询同一个数据时如果发现命中,就只会向数据库发送一条sql命令。不同的session会发送多次sql命令。

一级缓存

Hibernate一级缓存又称之为”Session缓存”,”会话期缓存”,顾名思义就是在会话期才会执行的缓存机制。一种轻量级的实现。session销毁时跟随销毁。

通过session从数据库查询实体时会把实体在内存中存储起来,下一次查询同一个实体时就不会再从数据库中获取了,而是从内存中获取此数据,大大的提高了数据获取的速度!

一级缓存的特点:

- 一级缓存无法撤销,而且是被强制执行的。

- 相关的API:

- evict():用于将某个对象从Session的一级缓存中清除

- clear():用于将一级缓存中的所有的对象全部清除

二级缓存

二级缓存的出现就是为了弥补一级缓存的生存期局限于session的生存期内,便于其他的session也能时用到缓存中的数据。即每个session都会共享的缓存,这就是Hibernate的二级缓存机制。

二级缓存默认不开启,所以需要手动的进行配置才行,步骤如下:

  • 添加二级缓存的对应的jar包:commons-logging.jar,ehcache.jar
  • 在Hibernate的配置文件中添加Provider类的描述:

    net.sf.ehcache.hibernate.EhCacheProvider
  • 添加二级缓存的属性配置文件:在hibernate-release-5.1.0.Final\hibernate-ehcache\ehcache.xml目录下可以找到,放到src目录下即可。
  • 在需要被缓存的表所对应的映射文件中添加标签。注意usage属性值的选择即可。

二者之间的区别

二级缓存: 其被称之为“全局缓存”,可供应用中所有的session共享缓存内容。是可插拔式的缓存,默认是EHCache,还可以支持其他的缓存组件,如Hashtable,OSCache,JBoss TreeCache等等。

在通常情况下将具有一下特征的数据会放到二级缓存中:

  • 很少被修改的数据
  • 不是很重要的数据,允许出现偶尔并发的数据
  • 不会被并发访问的数据
  • 参考性质的数据(字典表,码值表)

最新文章

  1. java中File类的getPath(),getAbsolutePath(),getCanonicalPath()区别
  2. POI 解析xls
  3. 【XLL API 函数】xlGetBinaryName
  4. Thymeleaf分页
  5. HDOJ 2030 汉字统计
  6. 表达式求值(二叉树方法/C++语言描述)(四)
  7. java中equals和==以及toString
  8. SQL学习笔记---常用命令
  9. 查看selenium API
  10. Linux电源管理(7)_Wakeup events framework【转】
  11. android studio 学习之一 安装和基本使用
  12. 背水一战 Windows 10 (70) - 控件(控件基类): UIElement - Transform3D(3D变换), Projection(3D投影)
  13. CentOS 解决vim乱码问题
  14. CentOS7 配置免密码登陆
  15. 稍稍解读下ThreadPoolExecutor
  16. js一次控制 多个style样式
  17. html5 canvas贝塞尔曲线篇(上)
  18. backlight 子系统(转载)
  19. 解读jquery.filtertable.min
  20. django 使用celery 实现异步任务

热门文章

  1. [Noi2016]网格
  2. bzoj4767两双手 容斥+组合
  3. SpringBoot添加自定义拦截器
  4. 基于GCC的openMP学习与测试
  5. JAVA GC垃圾收集器的分析
  6. moment.js常用时间示例,时间管理
  7. spring cloud 入门系列二:使用Eureka 进行服务治理
  8. gcc创建静态库和共享库
  9. python学习之路网络编程篇(第一篇)socket初识
  10. Node.js 调试器