Hibernate的二级缓存

1)首先什么是缓存,(2)再说有了hibernateSession就是一级缓存即有了一级缓存为什么还要有二级缓存,(3)最后再说如何配置Hibernate的二级缓存

(1)缓存就是把以前从数据库中查询出来和使用过的对象保存在内存中一个数据结构中),这个数据结构通常是或类似Hashmap,当以后要使用某个对象时先查询缓存中是否有这个对象如果有则使用缓存中的对象如果没有则去查询数据库并将查询出来的对象保存在缓存中以便下次使用下面是缓存的伪代码

引出hibernate的第二级缓存用下面的伪代码分析了Cache的实现原理

Dao

{

hashmap map = new map();

User getUser(integer id)

{

User user = map.get(id)

if(user == null)

{

user = session.get(id);

map.put(id,user);

}

return user;

}

}

 

Dao

{

Cache cache = null

setCache(Cache cache)

{

this.cache = cache

}

User getUser(int id)

{

if(cache!=null)

{

User user = cache.get(id);

if(user ==null)

{

user = session.get(id);

cache.put(id,user);

}

return user;

}

return session.get(id);

}

}

(2)HibernateSession就是一种缓存我们通常将之称为Hibernate的一级缓存当想使用session从数据库中查询出一个对象时,Session也是先从自己内部查看是否存在这个对象存在则直接返回不存在才去访问数据库并将查询的结果保存在自己内部由于Session代表一次会话过程一个Session与一个数据库连接相关连所以Session最好不要长时间保持打开通常仅用于一个事务当中在事务结束时就应关闭并且Session是线程不安全的被多个线程共享时容易出现问题通常只有那种全局意义上的缓存才是真正的缓存应用才有较大的缓存价值因此,HibernateSession这一级缓存的缓存作用并不明显应用价值不大。Hibernate的二级缓存就是要为Hibernate配置一种全局缓存让多个线程和多个事务都可以共享这个缓存我们希望的是一个人使用过其他人也可以使用,session没有这种效果

(3)二级缓存是独立于Hibernate的软件部件属于第三方的产品多个厂商和组织都提供有缓存产品例如,EHCacheOSCache等等Hibernate中使用二级缓存首先就要在hibernate.cfg.xml配置文件中配置使用哪个厂家的缓存产品接着需要配置该缓存产品自己的配置文件最后要配置Hibernate中的哪些实体对象要纳入到二级缓存的管理中明白了二级缓存原理和有了这个思路后很容易配置起Hibernate的二级缓存扩展知识一个SessionFactory可以关联一个二级缓存也即一个二级缓存只能负责缓存一个数据库中的数据当使用Hibernate 的二级缓存后注意不要有其他的应用或SessionFactory来更改当前数据库中的数据这样缓存的数据就会与数据库中的实际数据不一致
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值