zoukankan      html  css  js  c++  java
  • mybatis 缓存

    1. 缓存用的是装饰模式,首先定义了Cache接口,其它装饰类实现了这个接口,每个装饰类实现自己的功能
       默认的缓存采用hashmap
     
    2. 装饰类有
    1)日志cache:在getObject记录日志,输出缓存命中比例
     
    2)SoftCache和WeakCache:通过软引用和弱引用来实现缓存,很典型待详细分解
          主要实现思想为用 SoftCache和WeakCache存储数据的value,缓存的key还是放在原来的代理中。当垃圾回收的时候弱引用或者软引用被回收。而key还存在,缓存通过定义一个private final ReferenceQueue<Object> queueOfGarbageCollectedEntries;
    将垃圾回收的元素key存放在了队列中,下一次putObject 时将回收掉的缓存key清除掉
     
    3)SynchronizedCache缓存:get、put方法都加了synchronized关键字,同步操作
     
    4)ScheduledCache缓存:定时清理缓存,每隔一段时间定时清理一次缓存,默认为1小时
     
    5) SerializedCache: 序列化缓存,定义了serialize()deserialize()两个方法对对象进行序列化和反序列化,get和put对象时通过调用序列化方法将对象进行序列化和反序列化
    主要部分
          ByteArrayOutputStream bos = new ByteArrayOutputStream();
          ObjectOutputStream oos = new ObjectOutputStream(bos);
          oos.writeObject(value);
          oos.flush();
          oos.close(); 
     
    6) FifoCache:先进先出缓存,定义一个lLinklist存储缓存key,当队列满了之后去掉队头,将新加入的对象加入队尾
     
    7) LruCache:  就是缓存一定量的数据,当超过设定的阈值时就把一些过期的数据删除掉,判断过期数据的过程交给了LinkedHashMap
    keyMap = new LinkedHashMap<Object, Object>(size, .75F, true)
    其中第三个参数要为true,如果为false则这个map只是一个有顺序的,迭代出元素的顺序跟加入元素的顺序相对应。

    public void setSize(final int size) final关键字有什么作用?
     final关键字要求了传入的size不能被再赋值
       定义了一个继承了LinkedHashMap的内部类来存储缓存数据,重写了removeEldestEntry方法。当map缓存数据量超过设定值时将eldestKey指向eldest.getKey()
        

    8) 还有事务缓存,设置了两个map。插入或者删除的同时将数据插入这两个map中,回滚时从临时map里将数据取出

  • 相关阅读:
    Tomcatd断点调试Debug
    idea怎么部署Servlet
    ECMAScript基本语法——①与HTML的结合方式
    JavaScript简介
    程序员找工作,应该怎么应对面试官?
    你所未知的3种 Node.js 代码优化方式
    对 APM 用户的一次真实调查分析(上)
    Datadog Agent是啥?它消耗什么资源?
    Python 全栈开发 -- 开发环境篇
    成为运维界的「福尔摩斯」,你还需要3个帮手!
  • 原文地址:https://www.cnblogs.com/liguangming/p/6561080.html
Copyright © 2011-2022 走看看