国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JSP > 正文

JSP中使用cache取值出錯怎么辦

2024-09-05 00:18:46
字體:
來源:轉載
供稿:網友

?JSP中使用cache取值出錯怎么辦?我們在jsp中偶爾會發現取數據錯亂的問題,那么這是怎么一回事呢?仔細想了一下,有可能是緩存出了問題,那么我們現在一起跟小編去看看具體內容吧。

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

?這段時間發現系統取數據過程中,偶爾出現取數據錯亂的問題,按邏輯應該取出A數據,結果取出了B數據。仔細檢查了代碼,
發現代碼邏輯沒有問題,瞬間就蒙了,是哪里出現問題了呢。仔細想了一下,以前都沒出現問題,自從加了緩存之后就偶爾出現了問題,那肯定問題是緩存有問題。

仔細研究了緩存的源碼,原來問題出現在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);   }  } 

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

比如下面代碼,雖然參數值不一樣但是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));   } 

運行結果如下:

以上就是關于JSP中使用cache取值出錯怎么辦的內容,小編在這里非常感謝大家的閱讀,也希望本文能幫助到大家,謝謝大家對本站的支持!?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武宁县| 荣成市| 宜都市| 明溪县| 平潭县| 鄂尔多斯市| 海淀区| 宝兴县| 商河县| 成都市| 宽甸| 镶黄旗| 辽中县| 江山市| 云梦县| 师宗县| 澄城县| 会宁县| 天镇县| 永德县| 浦县| 湖州市| 通道| 长乐市| 洛浦县| 农安县| 德安县| 三门县| 长丰县| 普陀区| 黄骅市| 阜新市| 澜沧| 儋州市| 合川市| 手游| 耿马| 冀州市| 龙岩市| 海丰县| 西畴县|