mybatis中cache的類型

mybatis中cache的類型

 

 

PerpetualCache

永久緩存 一旦存入就一直保持,只要兩個id相同就認爲是兩個相同的cachenode

SynchronizedCache

同步緩存緩存

SerializedCache

序列化緩存mybatis

LoggingCache

日誌緩存app

WeakCache

弱引用緩存,能夠看到代碼和SoftCache一模一樣,就是SoftReference變成了WeakReferencespa

使用到數據對象Deque  Deques can also be used as LIFO (Last-In-First-Out) stacks 是一個隊列集合,支持隊列兩端插入和刪除元素.net

SoftCache

軟引用緩存,核心是SoftReference日誌

涉及到的引用

Reference->WeakReference->SoftReference引用相關 對象回收相關對象

ScheduledCache

定時調度緩存,目的是每一小時清空一下緩存blog

private boolean clearWhenStale() {隊列

//若是到時間了,清空一下緩存

if (System.currentTimeMillis() - lastClear > clearInterval) {

clear();

return true;

}

return false;

}

FifoCacheFIFO緩存

 這個類就是維護一個FIFO鏈表,其餘都委託給所包裝的cache去作。典型的裝飾模式

Deque<Object> keyList//增長記錄時判斷若是記錄已超過1024條,會移除鏈表的第一個元素,從而達到FIFO緩存效果

LruCache最近最少使用緩存

 

存了兩個map,用LinkedHashMap實現最近最少策略

 

class LinkedHashMap<K,V>

extends HashMap<K,V>

implements Map<K,V>

 

void afterNodeAccess(Node<K,V> e) { // move node to last

LinkedHashMap.Entry<K,V> last;

if (accessOrder && (last = tail) != e) {

LinkedHashMap.Entry<K,V> p =

(LinkedHashMap.Entry<K,V>)e, b = p.before, a = p.after;

p.after = null;

if (b == null)

head = a;

else

b.after = a;

if (a != null)

a.before = b;

else

last = b;

if (last == null)

head = p;

else {

p.before = last;

last.after = p;

}

tail = p;

++modCount;

}

}

 

最近訪問和最近插入都放到鏈表的後面,鏈表最前面的就是最長時間沒有訪問的節點

CacheKey緩存key

MyBatis 對於其 Key 的生成採起規則爲:[mappedStementId + offset + limit + SQL + queryParams + environment]生成一個哈希碼

 

https://my.oschina.net/lixin91/blog/620068

相關文章
相關標籤/搜索