码迷,mamicode.com
首页 > Web开发 > 详细

Hibernate的二级缓存

时间:2015-11-06 07:25:12      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:hibernate的二级缓存

    思路:(1)什么是缓存(2)hibernate的session是一级缓存,但有了一级缓存为什么还要有二级缓存呢?(3)如何配置Hibernate的二级缓存。

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

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

    (3)二级缓存是独立于hibernate的软件部件,属于第三方的产品,多个厂商和组织都提供有缓存产品,例如,EHCache和OSCache等等。在hibernate中使用二级缓存,首先就要在hibernate.cfg.xml配置文件中配置使用哪个厂家的缓存产品,接着需要配置该缓存产品的自己的配置文件,最后要配置hibernate中的那些实体对象要纳入到二级缓存的管理中。

    扩展知识:一个sessionfactory可以关联一个二级缓存,也即一个二级缓存只能负责缓存一个数据库中的数据,当使用hibernate的二级缓存后,注意不要有其他的应用或sessionfactory来更改当前数据库中的数据,这样缓存的数据就会与数据库中的实际数据不一致。

本文出自 “10850932” 博客,请务必保留此出处http://10860932.blog.51cto.com/10850932/1710132

Hibernate的二级缓存

标签:hibernate的二级缓存

原文地址:http://10860932.blog.51cto.com/10850932/1710132

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!