客户端缓存解决方案

来源:互联网 发布:淘宝其他费用 编辑:程序博客网 时间:2024/06/06 09:14
 
背景
       近期缓存问题频频出现,严重影响了软件的正常使用,还经常性地造成数据异常,直接影响客户对我们软件稳定性、安全性的不信任。虽然现在已经在业务控制上加了约束控制,可以说不会再出现业务数据异常问题,但是缓存的效果给客户还会带来不好的感受,也就影响了财政综合业务系统的整体水平。
客户端缓存
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读取临时文件的问题。
修改的地址不能为系统所有的链接地址,只修改相关有业务操作的页面地址,保证业务数据不会出现缓存问题。也就是说只要修改列表显示业务数据的链接地址,其它的可以不要修改。比如:在国库支付系统的已录入页面的地址。
对于随机数的取数方法由数据中心统一提供。
 
原创粉丝点击