cachingstatement在執行查詢的時候,會先從cachemodel中獲取結果。如果結果為空,則執行查詢並將結果儲存在cachemodel中。在讀寫cachemodel的過程中,都需要獲得cachekey物件,以cachekey作為快取的key。下面是獲得cachekey的過程:
cachingstatement
public cachekey getcachekey(statementscope statementscope, object parameterobject)
return key;
}
sdfpublic cachekey getcachekey(statementscope statementscope, object parameterobject)
parametermap
public cachekey getcachekey(statementscope statementscope, object parameterobject)
basedataexchange中 呼叫了primitivedataexchange的getdata,用getdata得到的陣列來更新key,也就是使用這次sql呼叫的引數值來更新key。
basedataexchange
public cachekey getcachekey(statementscope statementscope, parametermap parametermap, object parameterobject)
}return key;
}
primitivedataexchange從parametermap中獲得引數的個數,建立物件陣列data,將parameterobject付給陣列的每個元素。
primitivedataexchange
public object getdata(statementscope statementscope, parametermap parametermap, object parameterobject)
return data;
}
cachekey的update方法,增加引數計數值,修改checksum和basehashcode,使用引數的hashcode值和casehashcode來更新當前cachekey的hashcode
cachekey
public cachekey update(object object)
綜上所述,計算cachekey的因素包括basehashcode,sql語句的id,sql語句本身和每次呼叫傳入的sql引數值。如果cachemodel不是唯讀的而且不是可序列化的,則將當前的session資訊也作為cachekey的一部分。 IBatis 的快取機制
快取機制,也是基於 key value 的方式,確定了 key 的來龍去脈能很好的認識快取的生存週期。從配置檔案解析說起 0 1 private errorcontext errorcontext 0 2 private cachemodel cachemodel 0 3 0 4 cachemode...
(讀書筆記)Mysql 快取命中計算
可以使用show status和show variables監視緩衝區的使用情況和效能 快取命中率 100 key reads key read reauests 100 快取使用百分比 100 key blocks unused key cache block size key buffer si...
java中計算程式執行的時間
long beforetime system.currenttimemillis long aftertime system.currenttimemillis long timedistance aftertime beforetime system.out.println timedistanc...