使用缓存值的JSP中的错误解决方案
在这段时间内,在从系统中查找数据时,偶尔会出现无序数据的问题,应该从逻辑上取出数据,取出B的结果,仔细检查代码。
在发现代码逻辑方面没有问题,现在已经讨论了,问题在哪里,仔细想想。以前没有问题。自从添加缓存后,偶尔会出现问题。可以肯定的是,问题是缓存问题。
对缓存的源代码,仔细研究,原来问题出现在关键的defaultkeygenerator生成,代码如下:
公共课defaultkeygenerator实现keygenerator {
public static final int no_param_key = 0;
public static final int null_param_key = 53;
公共对象生成(对象、方法、对象)…params){
如果(params.length = = 1){
返回(params { 0 } = = null null_param_key:参数{ 0 });
}
如果(params.length = = 0){
返回no_param_key;
}
int hashCode = 17;
对(对象:params){
HashCode = 31 +(= = null对象的hashCode:object.hashcode(null_param_key));
}
返回integer.valueof(hashCode);
}
}
从源代码中,我们发现当参数参数都有一个或0次,直接返回null_param_key或参数参数{ 0 }。如果该参数大于1,则返回值添加到每个参数+ 31 * 17.this是个问题。虽然从A和B的数据不同的数据,参数的hashCode值是相同的。然后就可以提取数据并提取B数据。(在缓存中,如map,有键和值,根据键获得值值)。
例如,下面的代码,尽管参数值不同,但是键是相同的。
public static void main(String参数{ })
{
defaultkeygenerator G =新defaultkeygenerator();
整数param0 = 1000000759;
字符串参数=11;
System.out.println(param0 =+ param0 +
整数param01 = 1000000757;
字符串param11 =31;
System.out.println(param01 =+ param01 +
}
结果如下:
谢谢你的阅读。我希望你能帮助你,谢谢你对这个站的支持。