全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JSP  中使用cache取值出错解决办法

 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取值出错  # cache  # 正确使用方法  # window.top[_CACHE]实现多个jsp页面共享一个js对象  # JSP页面缓存cache技术--浏览器缓存介绍及实现方法  # 的是  # 来了  # 就像  # 出了  # 有可能  # 都没  # 出现在  # 这段  # 希望能  # 想了  # 问题是  # 谢谢大家  # 解决办法  # 可能出现  # 过程中  # 有一个  # 出现了  # 蒙了  # 瞬间  # 是一样的 


相关文章: 建站之星如何实现PC+手机+微信网站五合一建站?  存储型VPS适合搭建中小型网站吗?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  高防服务器:AI智能防御DDoS攻击与数据安全保障  如何用花生壳三步快速搭建专属网站?  建站主机服务器选购指南:轻量应用与VPS配置解析  如何安全更换建站之星模板并保留数据?  如何高效配置香港服务器实现快速建站?  高端企业智能建站程序:SEO优化与响应式模板定制开发  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  建站主机功能解析:服务器选择与快速搭建指南  如何用狗爹虚拟主机快速搭建网站?  如何有效防御Web建站篡改攻击?  如何在Windows虚拟主机上快速搭建网站?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  Python路径拼接规范_跨平台处理说明【指导】  Swift中switch语句区间和元组模式匹配  建站之星客服服务时间及联系方式如何?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  建站之星上传入口如何快速找到?  广东企业建站网站优化与SEO营销核心策略指南  网站制作公司排行榜,四大门户网站排名?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  建站主机SSH密钥生成步骤及常见问题解答?  想学网站制作怎么学,建立一个网站要花费多少?  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  如何设置并定期更换建站之星安全管理员密码?  如何在云主机上快速搭建多站点网站?  西安专业网站制作公司有哪些,陕西省建行官方网站?  ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?  高性价比服务器租赁——企业级配置与24小时运维服务  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  如何获取上海专业网站定制建站电话?  如何用已有域名快速搭建网站?  *服务器网站为何频现安全漏洞?  专业公司网站制作公司,用什么语言做企业网站比较好?  宁波自助建站系统如何快速打造专业企业网站?  网站制作知乎推荐,想做自己的网站用什么工具比较好?  长沙做网站要多少钱,长沙国安网络怎么样?  制作农业网站的软件,比较好的农业网站推荐一下?  网站按钮制作软件,如何实现网页中按钮的自动点击?  建站主机与虚拟主机有何区别?如何选择最优方案?  如何高效搭建专业期货交易平台网站?  建站之星安装模板失败:服务器环境不兼容?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  实现虚拟支付需哪些建站技术支撑?  如何配置支付宝与微信支付功能?  Swift中swift中的switch 语句  网站制作企业,网站的banner和导航栏是指什么? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。