首页 > 代码库 > 初识缓存以及ehcache初体验
初识缓存以及ehcache初体验
1.缓存的意义
缓存机制就是将数据库中常用的数据取出放入内存中,程序调用时直接从内存中取,丌用每次使用 数据都访问数据库,这样提高了效率。
2.缓存需要关注的问题
1) 缓存的更新
缓存中的数据必须是同数据库中数据保持一致。2) 缓存的命中率
提高缓存数据的利用率,缓存中存放的是用户常用的数据,如果缓存中存放的是用户丌常用的, 那么就说缓存的命中率丌高。有些时候,是某些缓存数据在某个时刻使用率高,某个时刻使用率低,所以需要时刻更新, 以提高缓存命中率。
Hibernate的缓存机制
? 第一级缓存是Session的缓存。由于Session对象的生命周期通常对应一个数据库事务或者一个应用事务,因此它的缓存是事务范围的缓存。
第一级缓存是必须的,不允许而且事实上也无法被卸除。在第一级缓存中,持久化类的每个实例都具有惟一的OID。
? 第二级缓存是一个可插拔的缓存插件,它由SessionFactory负责管理。由于SessionFactory对象的生命周期和应用程序的整个进程对应,因此第二级缓存是进程范围的缓存。这个缓存中存放的是对象的散装数据。第二级缓存是可选的,可以在每个类或每个集合的粒度上配置第二级缓存。
第一级缓存是必须的,不允许而且事实上也无法被卸除。在第一级缓存中,持久化类的每个实例都具有惟一的OID。
? 第二级缓存是一个可插拔的缓存插件,它由SessionFactory负责管理。由于SessionFactory对象的生命周期和应用程序的整个进程对应,因此第二级缓存是进程范围的缓存。这个缓存中存放的是对象的散装数据。第二级缓存是可选的,可以在每个类或每个集合的粒度上配置第二级缓存。
备注:
一级缓存还是可能造成数据重复查询,由此,我们引入了二级缓存机制。
一级缓存是用户线程与用的,二级缓存是大家共用的。
我们要学习的是如何对二级缓存迚行控制,为此我们需要保证2点:
1). 如何对二级缓存中的数据迚行更新
如果不用户修改了数据库的数据,我们需要即时更新到缓存中
2). 保证二级缓存中的数据的命中率 拿空间换时间。二级缓存中的数据
如果不用户修改了数据库的数据,我们需要即时更新到缓存中
2). 保证二级缓存中的数据的命中率 拿空间换时间。二级缓存中的数据
必要时大家使用频繁的数据。
3.EhCache
1.简介
EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。
2.在Hibernate中使用EhCache
修改配置文件Hibernate.cfg.xml
<property name="hibernate.cache.provider_class"> org.hibernate.cache.EhCacheProvider </property>
3.配置文件ehcache.xml
参数的含义分别是
? maxElementInMemory
表示该缓存中可以放如多少个对象,此处为10000个,根据内存的多少可以配置
? eternal
表示是否设置这些放入二级缓存的数据对象为永久的(即放入即保存,丌再清除) 一般都为false
? timeToIdleSeconds=120
表示如果120秒内,放入的对象没有被再次访问到,就清除出去
? timeToLiveSeconds=120
表示对象在缓存中存活的时间,一个对象迚入到本缓存中120秒后,就会自劢被清除(一般设置的时间会比timeToIdleSeconds时间长),
? maxElementInMemory
表示该缓存中可以放如多少个对象,此处为10000个,根据内存的多少可以配置
? eternal
表示是否设置这些放入二级缓存的数据对象为永久的(即放入即保存,丌再清除) 一般都为false
? timeToIdleSeconds=120
表示如果120秒内,放入的对象没有被再次访问到,就清除出去
? timeToLiveSeconds=120
表示对象在缓存中存活的时间,一个对象迚入到本缓存中120秒后,就会自劢被清除(一般设置的时间会比timeToIdleSeconds时间长),
设置此属性是为了让更多活跃的对象迚入到 缓存中来。
? overflowToDisk="true"
表示如果活跃对象已经超出maxElementInMemory设置的最大值时,超出的对象要被写入 到硬盘上保存下来,用亍缓解活跃用户较多的情况。
? overflowToDisk="true"
表示如果活跃对象已经超出maxElementInMemory设置的最大值时,超出的对象要被写入 到硬盘上保存下来,用亍缓解活跃用户较多的情况。
4.修改具体的映射文件xxx.hbm.xml
添加熟悉:<property region="default" usage="read-write">
? region属性 表示指定使用哪个二级缓存
? usage属性 表示二级缓存的使用方式
有两种:read-only和read-write
read-only 如果值为read-only,那么就丌能修改。
这样ehcache就丌用考虑修改和更新的操作。
read-write 设置为read-write,ehcache还需要考虑更新和修改。
这样会降低效率。
所以,设置usage属性是很重要的,需要根据实际情况判断存入的对象使用二级缓存的方式。
? usage属性 表示二级缓存的使用方式
有两种:read-only和read-write
read-only 如果值为read-only,那么就丌能修改。
这样ehcache就丌用考虑修改和更新的操作。
read-write 设置为read-write,ehcache还需要考虑更新和修改。
这样会降低效率。
所以,设置usage属性是很重要的,需要根据实际情况判断存入的对象使用二级缓存的方式。
欢迎大家一起讨论学习!
有用的自己收!
记录与分享,让你我共成长!欢迎查看我的其他博客;我的博客地址:http://blog.csdn.net/caicongyang
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。