mybatis 缓存

it2022-05-05  112

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里将数据取出

转载于:https://www.cnblogs.com/liguangming/p/6561080.html


最新回复(0)