项目中二级缓存理解,以hibernate为例
来源:互联网 发布:2016安卓版录音软件 编辑:程序博客网 时间:2024/06/05 17:17
(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)Hibernate的Session就是一种缓存,我们通常将之称为Hibernate的一级缓存,当想使用session从数据库中查询出一个对象时,Session也是先从自己内部查看是否存在这个对象,存在则直接返回,不存在才去访问数据库,并将查询的结果保存在自己内部。由于Session代表一次会话过程,一个Session与一个数据库连接相关连,所以Session最好不要长时间保持打开,通常仅用于一个事务当中,在事务结束时就应关闭。并且Session是线程不安全的,被多个线程共享时容易出现问题。通常只有那种全局意义上的缓存才是真正的缓存应用,才有较大的缓存价值,因此,Hibernate的Session这一级缓存的缓存作用并不明显,应用价值不大。Hibernate的二级缓存就是要为Hibernate配置一种全局缓存,让多个线程和多个事务都可以共享这个缓存。我们希望的是一个人使用过,其他人也可以使用,session没有这种效果。
(3)二级缓存是独立于Hibernate的软件部件,属于第三方的产品,多个厂商和组织都提供有缓存产品,例如,EHCache和OSCache等等。在Hibernate中使用二级缓存,首先就要在hibernate.cfg.xml配置文件中配置使用哪个厂家的缓存产品,接着需要配置该缓存产品自己的配置文件,最后要配置Hibernate中的哪些实体对象要纳入到二级缓存的管理中。明白了二级缓存原理和有了这个思路后,很容易配置起Hibernate的二级缓存。扩展知识:一个SessionFactory可以关联一个二级缓存,也即一个二级缓存只能负责缓存一个数据库中的数据,当使用Hibernate的二级缓存后,注意不要有其他的应用或SessionFactory来更改当前数据库中的数据,这样缓存的数据就会与数据库中的实际数据不一致。
- 项目中二级缓存理解,以hibernate为例
- 项目中使用hibernate二级缓存
- Hibernate 二级缓存初步理解
- Hibernate中使用二级缓存
- hibernate进二阶之理解二级缓存
- spring中配置hibernate二级缓存
- spring中配置hibernate二级缓存
- spring中配置hibernate二级缓存
- spring中配置hibernate二级缓存
- spring中配置hibernate二级缓存
- SSH中Hibernate配置二级缓存
- spring中配置hibernate二级缓存
- Hibernate中二级缓存的使用
- 以springMVC+spring+hibernate为框架的项目搭建步骤
- 对hibernate的二级缓存的理解
- hibernate:真正理解二级缓存和查询缓存
- hibernate二级缓存个人理解勿喷
- hibernate一级与二级缓存的理解
- Activity四种启动模式
- H5基础知识第八课时(flex布局)
- 测试国内开源数据库中间件Mycat和Atlas体会
- 数据仓库-BI商业智能
- 最近使用了asp.net,iis安装
- 项目中二级缓存理解,以hibernate为例
- Codeforces Round #363 (Div. 2) D. Fix a Tree —— 并查集
- c# 开源框架整理
- 人脸识别之人脸检测
- python中将类传给函数,在函数中修改类的值的问题
- WinForm之选择本地文件
- [每日问答]包含L1正则化项的目标函数如何求导?
- c程序设计语言第二版1.18
- 【php基础班】第6天 padding_margin、CSS背景、CSS Sprite、CSS表格属性、CSS浮动与清除