zoukankan      html  css  js  c++  java
  • MyBatis一级缓存和二级缓存

    MyBatis 中的缓存

    一级缓存

      Mybatis 一级缓存的作用域是同一个SqlSession,在同一个sqlSession中执行两次相同的SQL语句,第一次执行完毕后会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据不再从数据库中查询,从而提高查询效率。当一个sqlSession结束后该SqlSession中的一级缓存也就不存在了。Mybatis默认开启一级缓存。

        一级缓存是session级别的缓存,数据被缓存在session对象中

        特点:必须使用同一个session,一级缓存对增删改都是安全的。

    二级缓存:

      二级缓存放在他的命名空间里,默认是打开的,使用二级缓存属性类需要实现Serializable序列化接口,(可用于保存对象的状态),可在他的映射文件中配置<cache/>

        二级缓存是sessionFactory级别的缓存,数据被缓存在sessionFactory对象中

        特点:必须使用同一个sessionFactory对象,只对查询缓存,二级缓存对于增删改是不安全的,只对查询安全,二级缓存会对缓存的数据进行序列化。

    三 缓存算法:

        缓存 文件的读取速度慢于内存 所有有些查询过一次的数据 临时存储在内存中 二次查询 判断 内存是否存在 存在读取内存 不存在读取数据库

      缓存举例:

    package cn.et.mybatis.lesson05;
    
    import java.util.HashMap;
    import java.util.Map;
    /**
     * 缓存每行数据必须唯一标识符
     * @author Administrator
     *
     */
    public class Cache{
        //其实缓存就是一个Map
        private Map map=new HashMap();
        
        public Object cache(String key,Object obj){
            if(map.containsKey(key)){
                return map.get(key);
            }else{
                //连接数据库读取
                map.put(key, obj);
                return obj;
            }
        }
        public static void main(String[] args) {
            
        }
    }

    当内存不足时 考虑 将某些数据T出内存
        FIFO 将队列最右端的数据T出内存

        LFU 使用次数最少的T出内存
        LRU 最近使用次数最少的

  • 相关阅读:
    学习flying logic
    7-47 两数之和 (30 分)
    7-44 jmu-python-区间数之和 (10 分)
    7-45 jmu-python-涨工资 (10 分)
    7-42 jmu-python-找字符 (15 分)
    7-43 jmu-python-字符串异常处理 (20 分)
    7-40 jmu-python-统计成绩 (15 分)
    7-41 jmu-python-最佳身高 (10 分)
    7-35 jmu-python-求三角形面积及周长 (10 分)
    7-36 jmu-python-统计字符个数 (10 分)
  • 原文地址:https://www.cnblogs.com/xushirong/p/7029249.html
Copyright © 2011-2022 走看看