缓冲/存储技术
本文只要是关于二级缓存怎么清理或者关闭二级缓存的办法介绍,希望本文能让你对二级缓存有更深的理解。
CPU缓存(Cache Memory)位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。最初缓存只有一级,二级缓存(L2 CACHE)出现是为了协调一级缓存与内存之间的速度。二级缓存比一级缓存速度更慢,容量更大,主要就是做一级缓存和内存之间数据临时交换的地方用。实际上,现在Intel和AMD处理器在一级缓存的逻辑结构设计上有所不同,所以二级缓存对CPU性能的影响也不尽相同。
工作原理
缓存的工作原理是当CPU要读取一个数据时,首先从缓存中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。
正是这样的读取机制使CPU读取缓存的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在缓存中,只有大约10%需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先缓存后内存。 最早先的CPU缓存是个整体的,而且容量很低,英特尔公司从Pentium时代开始把缓存进行了分类。当时集成在CPU内核中的缓存已不足以满足CPU的需求,而制造工艺上的限制又不能大幅度提高缓存的容量。因此出现了集成在与CPU同一块电路板上或主板上的缓存,此时就把 CPU内核集成的缓存称为一级缓存,而外部的称为二级缓存。一级缓存中还分数据缓存(Data Cache,D-Cache)和指令缓存(Instruction Cache,I-Cache)。二者分别用来存放数据和执行这些数据的指令,而且两者可以同时被CPU访问,减少了争用Cache所造成的冲突,提高了处理器效能。
解决方法:
打开电源后,出现CPU主频和内存容量时,按下DEL键,进入CMOS SETUP页面。
进入BIOS→Advanced BIOS Features(高级BIOS特征)
→CPU L1 & L2 Cache(CPU一级和二级缓存)
打开(Enabled)或关闭(Disabled)CPU内部缓存(L1)和外部缓存(L2);
(按Page UP/Down键转换)。
按Esc键退回到COMOS SETUP页面 将光标移动到SAVE&EXIT SETUP 键入Y并回车
* save、update、saveOrupdate、load、get、list、query、Criteria方法都会填充二级缓存
* get、load、iterate会从二级缓存中取数据
* session.save(user) 如果user主键使用“native”生成,则不放入二级缓存。
(1)开启二级缓存
《property name=“cache.use_second_level_cache”》true《/property》
(2)为hibernate指定二级缓存的实现类
《property name=“cache.provider_class”》
org.hibernate.cache.OSCacheProvider
《/property》
(3)为OSCache缓存创建配置文件(需要hibernate_Advance_Surpport_lib)
src/oscache.properties
修改配置中的:
cache.capacity=1000 指定缓存可以容纳多少对象
(4)指明哪些类需要放入二级缓存,需要长期使用到的对象才有必要放入二级缓存
《class-cache class=“entity.PetInfo” usage=“read-only” /》 //不允许更新缓存中的对象
《class-cache class=“entity.PetInfo” usage=“read-write” /》 //允许更新缓存中的对象
或在orm文件中:
《class name=“entity.PetInfo” table=“PetInfo” schema=“dbo” catalog=“epet”》
《cache usage=“read-only”/》
。..
《/class》
(5)如果需要清除二级缓存,使用下面语法
sessionFactory.evict(User.class) 清除所有user
sessionFactory.evict(User.class,Id) 清除指定user
*1.引入如下jar包。
ehcache-1.2.3.jar 核心库
backport-util-concurrent.jar
commons-logging.jar
*2.配置Hibernate.cfg.xml开启二级缓存
《property name=“hibernate.cache.use_second_level_cache”》true《/property》
*3.配置二级缓存的供应商
《property name=“hibernate.cache.provider_class”》org.hibernate.cache.EhCacheProvider《/property》
在大配置文件(hibernate.cfg.xml)中配置
《class-cache usage=“read-write” class=“cn.happy.entity.Student”/》
《collection-cache usage=“read-write” collection=“”/》
二级缓存保存数据原理:
关于二级缓存的相关介绍就到这了,如有不足之处欢迎指正。
全部0条评论
快来发表一下你的评论吧 !