hibernate二级缓存,属于sessionFactory的级别,是全局缓存,它的生命周期和sessionFactory一致
配置步骤:
1: 要使用二级缓存<property name="hibernate.cache.use_second_level_cache">true</property>
2:使用哪个缓存提供商<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
3:把对应的缓存提供商的配置文件拷贝src下
4:指定哪些类使用二级缓存
1:在hibernate.cfg.xml中配置 <class-cache class="com.cs.Person" usage="read-write" />
2:在类的配置文件中配置:<cache usage="nonstrict-read-write" />
推介用第一种方法,理由:方便管理
什么数据入二级缓存:
1:数据不能被第三方应用修改
2:数据量不能太大
3:数据的更新频率要比较低
4:数据应该是被频繁的查询的数据
5:非关键数据
6:参考数据
参考数据的特点:
1>他的实例的数目有限
2>它的每个实例都会被其他类的实例引用
3>它的实例极少或者从来不修改
以下数据不适合放到二级缓存中
1》经常被修改
2》财务数据,绝对不容许出现并发问题
3》其他应用共享的数据。因为如果其他应用修改了数据,hibernate无法保证二级缓存中的数据和数据库中的数据一致。
查询缓存:查询缓存必须依赖于二级缓存
1:配置<property name="hibernate.cache.use_query_cache">true</property>
2:query.setCacheable(true) ;
3:查询缓存和session无关
注意:删除尽量不要用createQuery("delete from Object") 因为不能做到同步
建议使用session的delete()方法 , delete后就变为临时状态了.
配置步骤:
1: 要使用二级缓存<property name="hibernate.cache.use_second_level_cache">true</property>
2:使用哪个缓存提供商<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
3:把对应的缓存提供商的配置文件拷贝src下
4:指定哪些类使用二级缓存
1:在hibernate.cfg.xml中配置 <class-cache class="com.cs.Person" usage="read-write" />
2:在类的配置文件中配置:<cache usage="nonstrict-read-write" />
推介用第一种方法,理由:方便管理
什么数据入二级缓存:
1:数据不能被第三方应用修改
2:数据量不能太大
3:数据的更新频率要比较低
4:数据应该是被频繁的查询的数据
5:非关键数据
6:参考数据
参考数据的特点:
1>他的实例的数目有限
2>它的每个实例都会被其他类的实例引用
3>它的实例极少或者从来不修改
以下数据不适合放到二级缓存中
1》经常被修改
2》财务数据,绝对不容许出现并发问题
3》其他应用共享的数据。因为如果其他应用修改了数据,hibernate无法保证二级缓存中的数据和数据库中的数据一致。
查询缓存:查询缓存必须依赖于二级缓存
1:配置<property name="hibernate.cache.use_query_cache">true</property>
2:query.setCacheable(true) ;
3:查询缓存和session无关
注意:删除尽量不要用createQuery("delete from Object") 因为不能做到同步
建议使用session的delete()方法 , delete后就变为临时状态了.