Java代码
# W2 T) Y- p _( i1 n sessionFactory.evict(Customer.class, new Integer(1));8 U' w; s7 h9 l6 H# ^ F) s& W
evict(Class arg0) 将指定类的所有持久化对象从二级缓存中清除,释放其占用的内存资源.; v$ j7 v8 d8 _- `; S" G( v7 s) y
Java代码
9 _2 G5 G7 ~. u9 E sessionFactory.evict(Customer.class);
) F; l/ e* t6 o# h evictCollection(String arg0) 将指定类的所有持久化对象的指定集合从二级缓存中清除,释放其占用的内存资源.
" p' e4 P u0 _( ^6 `. X% ?/ N% l Java代码 G* C5 V, Y; j) J2 i' U3 e: l
sessionFactory.evictCollection("Customer.orders");
2 p7 K* x9 U1 J Hibernate的二级缓存的配置
* g7 |* B( a2 H \$ y2 s 首先,不是所有的数据都适合放在二级缓存中,看一下,什么样的数据适合放在二级缓存中来?什么样的数据不适合放在二级缓存中来?' |# |7 a0 R- Q5 l; L; E
下面这几种情况就不适合加载到二级缓存中:$ i0 Q" Z h* T$ W* y% B5 S
1.经常被修改的数据) t3 T$ Z& j5 h7 x: a
2.绝对不允许出现并发访问的数据7 }, `. m6 g/ W% S$ Q# l& s) z+ b
3.与其他应用共享的数据2 p* S5 n5 n* k. r" F' N
下面这己种情况合适加载到二级缓存中:
% Y0 `4 X- |: i. R 1.数据更新频率低! k/ Z. ^5 t! q. i
2.允许偶尔出现并发问题的非重要数据
1 C% d6 c$ l3 L! @# J: V) U' _ 3.不会被并发访问的数据5 b4 C0 R9 j6 Y
4.常量数据0 q: Z/ C& K' G+ Y" {
5.不会被第三方修改的数据
, N/ K2 M* T- k k Hibernate的二级缓存功能是靠配置二级缓存插件来实现的,Hibernate为了集成这些插件,Hibernate提供了org.hibernate.cache.CacheProvider借口,它充当缓存插件与Hibernate之间的适配器 .0 L' I' t4 s# b9 i" J, s1 }% E
常用的二级缓存插件0 i% X* O% a4 C' r
EHCache org.hibernate.cache.EhCacheProvider
6 i7 Q- K3 F. z! s ~: u9 G* H OSCache org.hibernate.cache.OSCacheProvider
) o5 P* F" ]) ~8 _: Q SwarmCahe org.hibernate.cache.SwarmCacheProvider
6 F( `$ o: e% g2 k JBossCache org.hibernate.cache.TreeCacheProvider
. }! h7 N) x( F 简单介绍一下EHCache的配置
$ e2 R4 n$ L6 c' @! H hibernate.cfg.xml: [9 R7 U: x! |7 m( V3 u( ^: a
Xml代码 |