首页 > 其他分享 >app测试日常踩坑——新老版本共用缓存问题

app测试日常踩坑——新老版本共用缓存问题

时间:2023-09-14 19:58:24浏览次数:42  
标签:缓存 模块 app 新老 版本 共用 页面 gocache

需求:在测一个页面,老版本就存在的一个页面(多个模块,一个接口分成三次请求返回),但是新版本要新增一个模块。老的页面的实现方式是页面直接读取redis数据(还有其他逻辑,方便解释暂时这样说),截取模块的方式来分接口返回,新增的一个模块是要放在中间。

方案:方案是沿用老的redis缓存,在老得缓存中加入这个新的模块的缓存,接口处理就做版本判断新版本在part1模块返回,老的接口不返回这个模块。(来自测试的认同:听起来好像没有问题)

测试过程:测试准备测一下客户端覆盖安装的场景,步骤一:安装的老版本没有返回这个模块,很棒!步骤二:覆盖安装并进入这个页面,咦?这个模块怎么不见了,一定是我瞎了,啊~再试一次,好像恢复了,模块出来了。什么情况?还好我连了Charles,抓到证据了,part1确实是没有返回这个模块,但是原本这个模块的位置被下面一个模块占了。哦~!我有思路了,首先怀疑缓存问题:1、redis缓存,难道测试环境redis缓存被覆盖了?我赶紧去查看下,发现没有,页面的缓存好好的,模块缓存也在对应位置。2、于是我开始怀疑gocache的问题,我跟开发说了下我的想法,怀疑是否是新老版本共用gochache的问题。

排查:我的想法得到了证实,新老版本确实共用一个gocache,其实共用也没有问题,后面做好处理就行了,但是开发做了一个骚操作,他把老版本访问的gocache剔除了新的模块(版本判断做在了这块了)。黑人问号脸.jpg!!!因为新老版本共用缓存,所以如果老版本触发了gocache,新版本再去访问读取这个gocache时候就会缺少这个模块。同样的,如果新版本触发了gocache,老版本再去访问读取这个gocache就会出现接口返回多这个新模块的情况。

修复bug:不在生成gocache里面做版本判断,不修改gocache,在读取gocache之后,拿到整个页面的数据结构体时,做版本判断,新版本返回这个模块,老版本屏蔽这个模块,再做数据的输出。

经验:如果涉及到新老版本共用一套缓存时,不能随意更改缓存数据。如果数据输出有区别的话,要在读缓存之后再做逻辑判断或者版本判断。

标签:缓存,模块,app,新老,版本,共用,页面,gocache
From: https://www.cnblogs.com/douzi1119/p/17703291.html

相关文章

  • app测试日常踩坑——gocache缓存的过期时间和生成间隔问题
    问题:自动化监控平台添加的分类详情页的接口报错,分类详情页校验失败,看到的错误信息是接口响应错误,信息如下:{"errors":{"id":"0","code":"44010102","level":"1","status":"200","title":"参数错误","popup......
  • Docker 深度清除镜像缓存 (overlay2)
    Docker深度清除镜像缓存(overlay2)一般情况下,运维清理镜像是通过命令dockerrmi删除镜像的。但是这条命令不会删除dockerbuild命令产生的缓存文件。这个时候需要使用dockersystem的系列命令来做相关处理。dockersystem--help输出:#输出Usage:dockersystemCO......
  • iOS开发实战-仿小红书App开发-1-App创建与Git
    1.新建项目 2.添加Git仓库 添加自己的gitHub账号.  3.Token获取方式: Settings. DeveloperSettings. 获取个人Token. 填写相关内容.得到Token后复制它,拿到Xcode中登录. 填写相关信息. 创建后打开GitHub,查看自己的所有仓库,发现小粉书仓库已......
  • Laravel 执行流程(三)之 探索 Application 构造函数
    备注:纯手打的学习笔记,如有错误之处请指正,谢谢。希望大家学的开心!说明:本来应该是说Container类(下)的,不过经过学习,直接看这个类实在不好理解,一会是绑定,一会共享实例,真心不知道说的什么....还是先从程序的入口处,顺藤摸瓜,用到的时候再结合上下文理解,比较容易消化,希望理解,抱歉!OK,从入......
  • 应对CDN缓存的一个小技巧
    工作中把一个文件放在CDN上面实时更新,并提供http下载地址。但是由于CDN缓存,下载下来的文件其实是几个小时以前的了。解决方法:下载请求的某尾添加一个随机参数,举例如:http://xxx.cdn.com/abc/123/test.xml?timestamp=12345678其中http://xxx.cdn.com/abc/123/test.xml为该文件的真实......
  • 基于HTTP协议的客户端缓存
    提到缓存,一般都会想起redis、memcached等分布式缓存系统。虽然使用这些服务器端缓存速度能提升不少,但其实还是需要客户端下载这部分数据,目前在移动互联网领域,节省流量是很有必要的,因此工作中也就需要加入客户端缓存的相关技术。 怎么使用客户端缓存?1、用http报头中的last-modified......
  • 获取JavaApplication当前工程路径
    前日因工作中使用到日志和配置工具类,使相关信息输出文件中,因此总结了一下java中获取当前路径的方法(非web工程)。1、File类:Filefile=newFile(".");System.out.println(file.getCanonicalPath());//如果是..则返回上一级文件夹System.out.println(file.getAbsolut......
  • 146. LRU 缓存
    请你设计并实现一个满足LRU(最近最少使用)缓存约束的数据结构。实现LRUCache类:LRUCache(intcapacity)以正整数作为容量capacity初始化LRU缓存intget(intkey)如果关键字key存在于缓存中,则返回关键字的值,否则返回-1。voidput(intkey,intvalue)如果......
  • app直播源码,Vue 禁止输入框输入空格
    app直播源码,Vue禁止输入框输入空格 <template> <div>  <input   type="text"   v-model="text"   @input="(e)=>text=e.target.value.replace(/\s/g,'')"  > </div></template><scri......
  • 直播app开发,CSS3动画实现左右无缝滚动图
    直播app开发,CSS3动画实现左右无缝滚动图<viewclass="shortList_con"><viewclass="scrollCon":style="'width:'+(shortRouteList.length)*210+'rpx'"><viewclass="shortItem"v-for="(item,index......