天天看点

客户端缓存解决方案

  背景        近期缓存问题频频出现,严重影响了软件的正常使用,还经常性地造成数据异常,直接影响客户对我们软件稳定性、安全性的不信任。虽然现在已经在业务控制上加了约束控制,可以说不会再出现业务数据异常问题,但是缓存的效果给客户还会带来不好的感受,也就影响了财政综合业务系统的整体水平。 客户端缓存 1. 带来的问题

日期 模块 问题描述
2006.7 国库支付系统-授权支付凭证录入 授权凭证录入时取资金使用情况存储在页面,如果出现缓存问题,资金使用情况取得永远是缓存对象里的,导致不能根据实际的资金使用情况控制授权凭证可使用的金额,因此部分单位发生超出可用额度的情况。
2006.12 国库支付系统-直接支付凭证作废 在直接支付的已录入页面如果存在缓存,就可以看得到已经进入下一个流程的数据,比如银行已确认,已经支付完成等。在我们系统看得到的数据就是可以操作的,所以直接支付凭证发生支付完成后还可以被作废。
2007.1 国库支付系统-授权支付凭证修改 在授权凭证的已录入页面如果存在缓存,就可以看得到已经进入下一个流程的数据,比如银行确认,已经支付完成等。在我门的系统能看到的数据就是可以操作的,所以授权凭证发生支付后还可以修改。

  通过以上表格很清楚的反应了缓存所带来的问题,虽然现在已经在程序上做了必要的业务逻辑判断,但是始终没用解决缓存的根本问题,如果程序存在没有判断好的情况,也就还会有出现数据上的问题危险。然而,缓存的存在始终对用户有一种不好的感觉,如果进入程序以后还可以看到以前操作过的数据,对用户来说会产生误解,也就影响了用户对系统的评价。 2. 前期解决方法 前期的解决方发如下: 在 WEB-INFO/jsp/common/meta.jsp 里设置 meta 的信息        <meta http-equiv="Cache-Control" content="no-store"/>     <meta http-equiv="Pragma" content="no-cache"/>     <meta http-equiv="Expires" content="0"/> 在 WEB-INFO/jsp/common/ innerHead.jsp 里设置请求头信息        <!-- 清除客户端缓存 -->  <% response.setHeader("Pragma","No-Cache"); response.setHeader("Cache-Control","No-Cache"); response.setDateHeader("Expires", 0);     %> 3. 建议解决方法 修改系统所有业务相关的链接地址,在链接地址后面自动加个随机数作为链接地址的参数,这样就能保证每个链接不会跟以前访问地址重复,也就不会产生 IE 读取临时文件的问题。 修改的地址不能为系统所有的链接地址,只修改相关有业务操作的页面地址,保证业务数据不会出现缓存问题。也就是说只要修改列表显示业务数据的链接地址,其它的可以不要修改。比如:在国库支付系统的已录入页面的地址。 对于随机数的取数方法由数据中心统一提供。