婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > JSP  中使用cache取值出錯解決辦法

JSP  中使用cache取值出錯解決辦法

熱門標(biāo)簽:地圖標(biāo)注市場怎么樣 如何用中國地圖標(biāo)注數(shù)字點(diǎn) 百度地圖添加標(biāo)注圖標(biāo)樣式 聊城智能電銷機(jī)器人外呼 企業(yè)怎么在聯(lián)通申請400電話 泰州泰興400電話 怎么申請 南京新思維電話機(jī)器人 南昌市地圖標(biāo)注app 好操作的電話機(jī)器人廠家

 JSP  中使用cache取值出錯解決辦法

 這段時間發(fā)現(xiàn)系統(tǒng)取數(shù)據(jù)過程中,偶爾出現(xiàn)取數(shù)據(jù)錯亂的問題,按邏輯應(yīng)該取出A數(shù)據(jù),結(jié)果取出了B數(shù)據(jù)。仔細(xì)檢查了代碼,
發(fā)現(xiàn)代碼邏輯沒有問題,瞬間就蒙了,是哪里出現(xiàn)問題了呢。仔細(xì)想了一下,以前都沒出現(xiàn)問題,自從加了緩存之后就偶爾出現(xiàn)了問題,那肯定問題是緩存有問題。

仔細(xì)研究了緩存的源碼,原來問題出現(xiàn)在DefaultKeyGenerator生成key上面。代碼如下:

public class DefaultKeyGenerator implements KeyGenerator { 
 
  public static final int NO_PARAM_KEY = 0; 
  public static final int NULL_PARAM_KEY = 53; 
 
  public Object generate(Object target, Method method, Object... params) { 
    if (params.length == 1) { 
      return (params[0] == null ? NULL_PARAM_KEY : params[0]); 
    } 
    if (params.length == 0) { 
      return NO_PARAM_KEY; 
    } 
    int hashCode = 17; 
    for (Object object : params) { 
      hashCode = 31 * hashCode + (object == null ? NULL_PARAM_KEY : object.hashCode()); 
    } 
    return Integer.valueOf(hashCode); 
  } 
 
} 

從源碼中我們發(fā)現(xiàn),當(dāng)參數(shù):params有一個或0的時候,直接返回NULL_PARAM_KEY或者參數(shù)params[0],假如params參數(shù)大于1的時候返回的是各個參數(shù)的hash值相加的值+31*17。這樣就出現(xiàn)問題了,雖然取A數(shù)據(jù)與取B數(shù)據(jù)的各個參數(shù)的值不一樣,但是有可能它們參數(shù)的hashcode值是一樣的,那么就可能出現(xiàn)取A數(shù)據(jù)把B數(shù)據(jù)取出來了。(cache中就像map一樣,有key和value,根據(jù)key來取value值)。

比如下面代碼,雖然參數(shù)值不一樣但是key是相同的。

public static void main(String argv[]) 
  { 
    DefaultKeyGenerator g = new DefaultKeyGenerator(); 
    Integer param0 = 1000000759; 
    String param1 = "11"; 
    System.out.println(" param0="+param0+", param1="+param1+" generate key: "+g.generate(null,null,param0,param1)); 
    Integer param01 = 1000000757; 
    String param11 = "31"; 
    System.out.println("param01="+param01+",param11="+param11+" generate key: "+g.generate(null,null,param01,param11)); 
  } 

運(yùn)行結(jié)果如下:

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持! 

您可能感興趣的文章:
  • window.top[_CACHE]實(shí)現(xiàn)多個jsp頁面共享一個js對象
  • JSP頁面緩存cache技術(shù)--瀏覽器緩存介紹及實(shí)現(xiàn)方法

標(biāo)簽:烏蘭察布 白銀 開封 銅川 自貢 吉林 山南 臨汾

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《JSP  中使用cache取值出錯解決辦法》,本文關(guān)鍵詞  JSP,amp,nbsp,中,使用,cache,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《JSP  中使用cache取值出錯解決辦法》相關(guān)的同類信息!
  • 本頁收集關(guān)于JSP  中使用cache取值出錯解決辦法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 休宁县| 黄浦区| 金阳县| 吉首市| 临漳县| 茂名市| 随州市| 徐州市| 榕江县| 衡水市| 桦甸市| 鞍山市| 景东| 济阳县| 高雄县| 夹江县| 永清县| 厦门市| 江达县| 泰安市| 新郑市| 庆云县| 八宿县| 潮安县| 周口市| 星子县| 德昌县| 南木林县| 南安市| 台前县| 新宁县| 娄烦县| 儋州市| SHOW| 弥勒县| 蒲江县| 三亚市| 盱眙县| 什邡市| 宝坻区| 阳春市|