懵了,面试官问我Redis怎么测,我哪知道!

news2025/1/14 18:39:38

有些测试朋友来问我,redis要怎么测试?首先我们需要知道,redis是什么?它能做什么?

redis是一个key-value类型的高速存储数据库。
redis常被用做:缓存、队列、发布订阅等。 

所以,“redis要怎么测试?”这个问题就可以转化为:

缓存怎么测试?
队列怎么测试?
订阅怎么测试?
在我所接触的技术栈中,发布订阅很少用redis的,我们主要说一说缓存和队列。

01、缓存的分类
缓存有几种类型:文件缓存、数据库缓存、内存缓存、浏览器缓存。

浏览器缓存指的是浏览器自身的缓存能力。现代浏览器为了加快页面加载速度,往往会把css、js等资源文件下载一次之后缓存一段时间,直到缓存失效或者请求明确告知需要更新。

通过后端语言直接渲染、smarty等模板渲染方式输出界面的,一般都会选择文件类型缓存。

图--文件缓存

随着大前端技术迅速发展,前后端分离越来越流行,smarty渲染的方式使用越来越少,对后端服务的接口响应时间要求也越来越高,文件缓存不再适用这种场景,数据库缓存越来越流行。

数据库缓存目前最常见的:redis和memcached。它们都是分布式的key-value高速缓存系统。

上图--redis缓存

内存缓存跟数据库缓存也是类似的,但受技术栈限制,比如Java可以使用,并且Java中使用非常频繁,但PHP无法使用。内存缓存比数据库缓存更快,但因为内存不可能一直增加,所以限制更多,稍不注意就会出现内存泄漏等问题。

在实际的使用过程中,Java接口往往会将部分高频数据塞到内存缓存中作为一级缓存,次高频数据塞到redis中作为二级缓存,最后再从db查询数据。

上图--组合使用

缓存的作用:
从上面的内容你可能已经知道,缓存最重要的两个作用:加快访问速度、减少服务器和db压力。  

 

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:632880530

 

02、缓存的使用场景
你可能会问,上面这些跟测试没啥关系啊?不,我认为了解上面的内容对测试还是有帮助的。你知道在技术实现上,什么时候应该加缓存,什么时候不应该加缓存吗?这就是对一个接口的技术把控,不光开发需要知道,测试人员也一样。

如果一个应该添加缓存的接口没有添加缓存在压测之前被你提前发现了,你不觉得自豪吗?其实跟缓存的作用一一对应,当接口的qps较高(比如超过100)或者对响应速度有要求,或者服务器性能、db性能较差的,都可以尝试使用缓存解决问题。

我举几个例子说明:

1、微信新版本中,个人中心多了一个“状态”功能。

微信的用户体量非常庞大,访问qps非常高,几十万人在同一秒访问,不可能每次都去查询数据库。

类似这种需求,一般会是这样的做法:先把用户的状态数据缓存在app中(浏览器缓存),在某个时间段通过主动推或者被动拉的方式调用后端接口请求“状态”数据;接口从redis/memcached的缓存中读取数据并返回;如果数据量不那么庞大,接口可以直接从内存缓存中读取数据并返回;数据返回后,再把用户app中的缓存更新。

上图--示例1

2、有一个小型电商的商品管理后台列表页面,访问人数不多,sku改动频次很低,可能3天才被访问几十次。这种场景一不需要使用缓存,二在商品信息被更新之后需要立即看到更新后的数据,不适合使用缓存,所以不建议使用缓存。

3、同样的电商管理后台,这次是一个统计页面,统计昨天/今天/近一周的商品销售情况。

这个场景可以分情况来看,有多种不同的解决方案。

(我们抛开大数据统计的各类技术方案,简单实现一个系统的统计功能)

不需要实时统计
只需要定时统计一次即可,比如只看昨天一天统计数据:可以由定时脚本统计之后直接存储在db,需要查看统计数据时直接查询db即可
需要查询实时统计数据
但需要查询的各个统计sql执行效率满足预期:每次查看数据直接查询db即可,此时db压力不大
需要查询实时统计数据
且因业务数据庞大,各个统计sql执行效率非常低或无法直接统计:可以汇总各个指标,将统计值维护在缓存中,比如需要销量信息,每售出一件商品,销量统计值缓存+1,查看统计数据时查询此时的缓存即可
03、缓存的生成方式
了解到缓存的使用场景之后,我们来说说缓存的生成方式。

一般来说缓存有两种使用方式,我简单概括为:外面和里面。

先来说说一个接口的请求到了程序里,是怎么处理的:

上图--程序处理流程

这是一个典型的MVC,由Controller接收和处理请求数据,由Service处理Model中获取的数据,再由View输出。

对不同场景,我们可以采取多种方式,在多个节点增加不同的缓存,来解决不同的问题。

比如,针对请求参数多变,返回的数据如果跟请求参数强相关,适合在“外面”(请求参数过滤之后)缓存查询到的数据。这类数据一般缓存时间短,比如缓存5分钟。主要应对相同请求参数在短时间内的重复请求。如果遇到请求攻击,即使这个缓存有效期只有1秒,也是很有效的,能挡住大量的请求。

上图--在“外面”缓存

比如,针对请求参数变化不大,返回的数据跟db中存储的数据很接近的情况,适合在“里面”缓存数据,也就是在更新db的同时更新缓存,这种情况最优的状态下,只需要读缓存就够了,不需要跟db直接交互,能大大缓解db压力。这种缓存有效期可以设置很长。

上图--在“里面”缓存

04、缓存的更新方式
说完生成,再来说说缓存的更新。缓存在生成之后,正常都不会一成不变,所以需要对缓存进行更新。

有几种更新方式:

过期后自动更新:这是最懒的更新方式。通过设置缓存有效期,让缓存失效后通过新的请求自动创建新的缓存。
删除缓存:在更新db数据后,直接删除缓存,通过新的请求自动创建新的缓存。
重新设置缓存:在更新db数据后,直接重新设置缓存。
05、redis缓存测试点
1、性能测试角度

缓存增加/更新功能是否正确,查看缓存数据是否正确

增加相关日志,查看日志
后门接口工具
使用命令行,memcached和reids可以登录后,直接查看
缓存删除

缓存有效,验证相关业务功能
缓存被删除,验证相关业务功能
缓存过期失效,memcached 和redis 可以设置失效时间,查看失效时间有没有,对不对
超量淘汰机制:缓存达到上限怎么处理

缓存穿透

缓存雪崩

redis缓存服务停掉

缓存超时

缓存数据被误修改后,快速恢复到指定版本

缓存数据被误删除后,快速恢复数据

2、Redis功能测试角度

redis数据生效时,读取是否正确
redis数据不存在,能否正常从db中读取到正确的值,并正确写入Redis和返回给上层
数据在redis和db中都不存在时的表现是否正常
删除数据时,redis和db的数据是否一致
下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

 

资料获取方式 :

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/927043.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据通信——OSPF基础

一,实验背景 公司盈利了,老总打算扩展公司规模,也发现了RIP协议的缺点带来的影响。身为工程师,老总让你替换更好的网络,顺带为拓展出的新部门进行新的网络部署,甚至买来很多设备。 此时你要用OSPF协议解决问…

推荐系统在线峰会来了,冷启动、推荐工程、模型训练…你都能找到答案

回顾推荐系统的发展历程,从 30 余年前的协同过滤算法起步,经历了深度学习的浪潮,到如今热火朝天的大模型,推荐系统一次又一次地焕发出新的活力。随着大模型的到来,推荐系统正处于变革的前夜,原有的系统模块…

计算机竞赛 基于大数据的时间序列股价预测分析与可视化 - lstm

文章目录 1 前言2 时间序列的由来2.1 四种模型的名称: 3 数据预览4 理论公式4.1 协方差4.2 相关系数4.3 scikit-learn计算相关性 5 金融数据的时序分析5.1 数据概况5.2 序列变化情况计算 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 &…

最新Python浪漫520表白代码?

前言 520是每年的5月20日,因数字“520”与“我爱你”发音相似而被许多年轻人用作表达爱意的节日。这个节日起源于中国互联网文化,逐渐传递到其他国家和地区。在这一天,情侣们通常会互送礼物、发表情、或者举行浪漫的活动来庆祝爱情。快来领取…

Unity ProBuilder SetUVs 不起作用

ProBuilder SetUVs 不起作用 🐟 需要设置face.manulUV true public static void Set01UV(this ProBuilderMesh mesh){foreach (var face in mesh.faces){face.manualUV true;//设置为手动uv}var vertices mesh.GetVertices().Select(v > v.position).ToArray(…

计算机竞赛 基于图像识别的跌倒检测算法

前言 🔥 优质竞赛项目系列,今天要分享的是 基于图像识别的跌倒检测算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/…

大数据平台安全主要是指什么安全?如何保障?

大数据时代已经来临,各种数据充斥着我们的生活与工作。随着数据的多样性以及复杂性以及大量性,大数据平台诞生了。但对于大数据平台大家都不是很了解,有人问大数据平台安全主要是指什么安全?如何保障? 大数据平台安全…

9.阿里Sentinel哨兵

1.Sentinel Sentinel(哨兵)是由阿里开源的一款流量控制和熔断降级框架,用于保护分布式系统中的应用免受流量涌入、超载和故障的影响。它可以作为微服务架构中的一部分,用于保护服务不被异常流量冲垮,从而提高系统的稳定…

angular15 数据切换报错

解决方案 1.涉及的属性不要公用,只能有一个标签调用 2.settimeout setTimeout(() > { xxx //导致报错的赋值代码 }, 0);

全新红娘交友系统定制版源码/相亲交友小程序源码

全新红娘交友系统定制版源码,相亲交友小程序源码。定制版红娘交友平台小程序源码,很牛逼的东西,虽然是小程序,但是有700多M大,功能超级强大,还带聊天等功能。 下载地址:https://bbs.csdn.net/t…

Drools的KieSession(有状态会话)的获取,领导就说一句话,员工加班都做不完!

使用Drools规则引擎的代码,最简单的主要有以下几部分: //这一部分的连接:“万恶”之源的KieServices,获取代码就一行,表面代码越少里面东西就越多,本以为就是个简单的工厂方法,没想到里面弯弯绕…

Windows下编译NextCloud desktop 3.9.1

首先从官方下载源码: https://github.com/nextcloud/desktop💻 Desktop sync client for Nextcloud. Contribute to nextcloud/desktop development by creating an account on GitHub.https://github.com/nextcloud/desktop 我选择的是3.9.1的稳定版本…

工控机引领移动机器人的智能化革命!

随着制造业数字化转型的加速,工业4.0时代的到来,工业互联网逐步成为中国推进新型工业化进程的核心驱动力量。而工控机作为工业互联网领域的重要组成部分,已经在越来越多行业得到广泛应用。据中商情报网数据显示,2022年我国工业自动…

Linux CentOS7系统,抓取http协议的数据包

使用 tcpdump 命令 1.首先确认是否安装 [rootlocalhost ~]# which tcpdump /usr/bin/which: no tcpdump in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin) [rootlocalhost ~]#我这里没有安装 1.1 安装 tcpdump yum install tcpdump 安装成功如下&#xf…

【Linux】进程间通信原理与Reactor模式

一、用户进程缓冲区和内核缓冲区 缓冲区的目的,是为了减少频繁的系统IO调用。大家都知道,系统调用需要保存之前的进程数据和状态等信息,而结束调用之后回来还需要恢复之前的信息,为了减少这种损耗时间、也损耗性能的系统调用&…

有趣的无限缓存OOM现象

作者:邹阿涛涛涛涛涛涛 想必大家都知道OOM是啥吧,我就不扯花里胡哨的了,直接进入正题。先说一个背景故事,我司app扫码框架用的zxing,在很长一段时间以前,做过一系列的扫码优化,稍微列一下跟今天…

学习ts(九)混入

对象混入 使用Object.assign()进行对象混入,最后的people会被识别为三种类型的联合类型 类混入 使用implement并非extnds实现混入。 属性在混入类里面定义,分别在类中占位,方法分别在类中定义,在混合类中占位。这告诉编译器这…

自动化的驱动力,工控机助您实现智能生产!

“智能工厂建设如火如荼,部分成果已经落地,在大规模资金投入的市场催化下,海尔、海信等制造企业通过智能工厂手段推进生产效率成倍增长的新闻层出不穷。在工业4.0时代,“中国制造2025”战略中,智能工厂构建都是其中不可…

激活函数总结(十九):激活函数补充(ISRU、ISRLU)

激活函数总结(十九):激活函数补充 1 引言2 激活函数2.1 Inverse Square Root Unit (ISRU)激活函数2.2 Inverse Square Root Linear Unit (ISRLU)激活函数 3. 总结 1 引言 在前面的文章中已经介绍了介绍了一系列激活函…

用docker-compose搭建LNMP

docker-compose搭建LNMP 一、compose 的部署1.Docker Compose 环境安装 二、编写Docker Compose1.准备依赖文件,配置nginx2.配置mysql3.配置php4.编写docker-compose.yml5.执行6.查看 一、compose 的部署 (1)公司在实际的生产环境中,需要使用…