Hibernate——缓存
2015-11-22 11:51
363 查看
·什么是缓存:
内存中开辟的一块空间,把本来应该存储在硬盘中的东西放入该空间,以后需要时直接从该空间读取,这部分内存就叫缓存
·什么是一级缓存:
session级别的缓存
在同一个session中,每取一个新对象,则会将其放在session缓存中,等到下次再使用该对象时,则直接从session缓存中取出
缺点:多线程情况下,每个线程都是一个不同的session,若每个线程都需要访问相同的对象,则都需要先从数据库中取出该对象。效率不高
·什么是二级缓存:
总的大缓存、SessionFactory级别的缓存
引入Jar包:
在hibernate.cfg.xml中配置:
适合放在二级缓存中的对象:
经常被访问、改动不大、数量有限的对象
load、iterate默认使用二级缓存
list查询时不使用二级缓存,但是查出的结果会放入二级缓存
·什么是三级缓存(查询缓存):
只用在同样的、重复的查询中
在hibernate.cfg.xml文件中配置:
打开查询缓存:
【注意】:查询缓存依赖于二级缓存,故需要先配置二级缓存,再打开查询缓存
在Java文件中设置使用查询缓存:
·缓存算法:
·LRU:least recently used,最近很久未被使用的(最久未被使用)
·LFU:least frequently used,最近很少被使用的(被使用次数最少的)
·FIFO:first in first out,先进先出
4000
内存中开辟的一块空间,把本来应该存储在硬盘中的东西放入该空间,以后需要时直接从该空间读取,这部分内存就叫缓存
·什么是一级缓存:
session级别的缓存
在同一个session中,每取一个新对象,则会将其放在session缓存中,等到下次再使用该对象时,则直接从session缓存中取出
缺点:多线程情况下,每个线程都是一个不同的session,若每个线程都需要访问相同的对象,则都需要先从数据库中取出该对象。效率不高
·什么是二级缓存:
总的大缓存、SessionFactory级别的缓存
引入Jar包:
在hibernate.cfg.xml中配置:
<!-- 打开二级缓存!二级缓存默认是关闭的 --> <property name="hibernate.cache.use_second_level_cache">true</property> <!-- 指定使用EhCache --> <property name="hibernate.cache.region.factory_class">org.hibernate.cache.EhCacheRegionFactory</property> <!-- 指定需要使用二级缓存的类!或在类上注解@Cache(usage = CacheConcurrencyStrategy.READ_ONLY/READ_WIRTE) --> <class-cache usage="read-only" class="需要使用二级缓存的类"/>
适合放在二级缓存中的对象:
经常被访问、改动不大、数量有限的对象
load、iterate默认使用二级缓存
list查询时不使用二级缓存,但是查出的结果会放入二级缓存
·什么是三级缓存(查询缓存):
只用在同样的、重复的查询中
在hibernate.cfg.xml文件中配置:
打开查询缓存:
<property name="hibernate.cache.use_query_cache">true</property>
【注意】:查询缓存依赖于二级缓存,故需要先配置二级缓存,再打开查询缓存
在Java文件中设置使用查询缓存:
session.createQuery("from User").setCacheable(true).list();
·缓存算法:
·LRU:least recently used,最近很久未被使用的(最久未被使用)
·LFU:least frequently used,最近很少被使用的(被使用次数最少的)
·FIFO:first in first out,先进先出
4000
相关文章推荐
- Python3写爬虫(四)多线程实现数据爬取
- kindeditor 批量上传 上传失败 thinkphp swfupload session
- 杰奇登录后的东西都是在session里面的
- C#实现多线程的同步方法实例分析
- ASP中SESSION无法保存问题的解决办法
- 浅谈chuck-lua中的多线程
- C#简单多线程同步和优先权用法实例
- Enterprise Library for .NET Framework 2.0缓存使用实例
- PowerShell中编程清空IE缓存方法
- PowerShell中使用.NET将程序集加入全局程序集缓存
- C#多线程学习之(四)使用线程池进行多线程的自动管理
- C#多线程编程中的锁系统(三)
- C#多线程学习之(六)互斥对象用法实例
- 基于一个应用程序多线程误用的分析详解
- Oracle中的Connect/session和process的区别及关系介绍
- C#多线程学习之(三)生产者和消费者用法分析
- C#多线程学习之(一)多线程的相关概念分析
- C#多线程之Thread中Thread.IsAlive属性用法分析
- C#中缓存的基本用法总结