一级缓存,二级缓存,分布式缓存和页面缓存

1、缓存介绍

当处理器读取数据时,首先会从缓存中查找,如果缓存有数据,那么处理器直接使用,如果缓存中中没有,则从读取速度相对慢的内存中读取,同时把这个数据块调入缓存中,以便再次使用,这样可以大大节省读取内存的时间。

在JAVA-EE中缓存对于数据量大,高并发显得特别重要

  1. 用户–后台 采用OSCache缓存
  2. 持久层一级缓存
  3. 持久层二级缓存
  4. 分布式缓存
    这里写图片描述

1、一级缓存

当Hibernate根据ID访问数据对象的时候,首先会从Session一级缓存中查找,如果查不到并且配置了二级缓存,那么会从二级缓存中查找,如果还查不到,就会查询数据库,把结果按照ID放入到缓存中。

一级缓存作用于Dao层(数据库)

这里写图片描述

1、在Hiberante中也就是Session级别缓存,与Session绑定,生命周期与Session也相同。

Session session=factory.openSession();
    Transaction ts = null;
    try {
      ts=session.beginTransaction(); //开始一个事务
      ...................                       //执行事务
      ts.commit();                           //提交事务
    } catch (HibernateException e) {     //如果出现异常就撤销事务
      if(ts!=null){
        ts.rollback();                        //回滚事务
      }
      e.printStackTrace();
    } finally{
      session.close();//不管事务执行成功与否,最后都关闭Session并且放在finally中以提高安全性
    }

优点:缓存在内存中,读取速度较快
缓存具体到某个事务,范围比较小

缺点:内存容量有限,通过合理的方式检索或者限制查询大小。

2、二级缓存

这里写图片描述

二级缓存是在SessionFactory中(也就是在数据库连接池中所有dao共享)

缓存介质:内存和硬盘,如果内存缓存达到上限时,可指定硬盘缓存,在Hibernate中就是CacheProvider(缓存适配器)

二级缓存适用场景:

  1. 很少被修改的数据
  2. 对并发要求不高
  3. 不重要的数据
public void run() {

           SessionFactory sf = CacheMain.getSessionFactory();

           Session session = sf.getCurrentSession();


           session.beginTransaction();



           User user = (User)session.get( User.class, "1" );

           System.out.println( user );        

           session.getTransaction().commit();

}
       public static void main(String[] args) {

              CacheMain main1 = new CacheMain();
              main1.start();
              CacheMain main2 = new CacheMain();
              main2.start();
       }

}

3、分布式缓存

分页式缓存CARP(Caching Array Routing Protocol)技术,可以产生一种高效无接缝式的缓存,使得让多台缓存服务器形同一台,并且不会造成数据重复存放的情况。
同时还有层次缓存,动态缓存和计划缓存三种。

这里写图片描述

5、OSCache

OSCache是一种页面缓存技术
缓存任何对象,你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。

缓存介质:内存和硬盘。

OSCache缓存域分application和session两种
application(对性能优化作用很明显)和某个 用户某次操作某个网站session(用户和web服务器会话)级共享两种。对共享的资源设置过期时间。即当服务器运行时发现在
作用域内还有对象,就以类似静态页面的形式(因为缓存了要显示的信息)提供给客户端,当过期了,就需要重查资源(如果是页面里的缓存就需要资源能在jsp 里提供)。如果没有过期,但内容改变了,可以通过flush的方式清除老资源以便加载新的资源。

参考博客
http://dododo1234321-163-com.iteye.com/blog/1828173

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值