懵了,面试官问我Redis怎么测,直接凉了...

news2024/11/18 15:45:10

前言

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

redis是一个key-value类型的高速存储数据库。

redis常被用做:缓存、队列、发布订阅等。

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

  • 缓存怎么测试?

  • 队列怎么测试?

  • 订阅怎么测试?

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

同时,我也为大家准备了一份软件测试视频教程,就在下方,需要的可以直接去观看,也可以直接点击文末小卡片免费领取资料文档

免费视频教程观看处:

一个很变态但可以让你迅速掌握自动化测试(Web/接口自动化/APP/Selenium/性能测试等)的神奇方法_哔哩哔哩_bilibili一个很变态但可以让你迅速掌握自动化测试(Web/接口自动化/APP/Selenium/性能测试等)的神奇方法共计100条视频,包括:【自动化测试】 如何设计接口测试用例?、【自动化测试】自动化测试框架设计思路、软件测试全套资料及学习路线等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV1hj411z71j/?spm_id_from=333.999.0.0&vd_source=74d0257ec7066cc4f9013524f0bb7013

一、缓存的分类

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

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

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

图片
图--文件缓存

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

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

图片
 上图--redis缓存

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

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

图片
 上图--组合使用

缓存的作用:

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

二、缓存的使用场景

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

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

我举几个例子说明:

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

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

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

图片
上图--示例1

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

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

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

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

  • 不需要实时统计

    只需要定时统计一次即可,比如只看昨天一天统计数据:可以由定时脚本统计之后直接存储在db,需要查看统计数据时直接查询db即可

  • 需要查询实时统计数据

    但需要查询的各个统计sql执行效率满足预期:每次查看数据直接查询db即可,此时db压力不大

  • 需要查询实时统计数据

    且因业务数据庞大,各个统计sql执行效率非常低或无法直接统计:可以汇总各个指标,将统计值维护在缓存中,比如需要销量信息,每售出一件商品,销量统计值缓存+1,查看统计数据时查询此时的缓存即可

三、缓存的生成方式

了解到缓存的使用场景之后,我们来说说缓存的生成方式。

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

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

图片
上图--程序处理流程

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

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

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

图片
 上图--在“外面”缓存

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

图片
上图--在“里面”缓存

四、缓存的更新方式

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

有几种更新方式:

  • 过期后自动更新:这是最懒的更新方式。通过设置缓存有效期,让缓存失效后通过新的请求自动创建新的缓存。

  • 删除缓存:在更新db数据后,直接删除缓存,通过新的请求自动创建新的缓存。

  • 重新设置缓存:在更新db数据后,直接重新设置缓存。

五、redis缓存测试点

1、性能测试角度

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

  • 增加相关日志,查看日志

  • 后门接口工具

  • 使用命令行,memcached和reids可以登录后,直接查看

缓存删除

  • 缓存有效,验证相关业务功能

  • 缓存被删除,验证相关业务功能

  • 缓存过期失效,memcached 和redis 可以设置失效时间,查看失效时间有没有,对不对

超量淘汰机制:缓存达到上限怎么处理

缓存穿透

缓存雪崩

redis缓存服务停掉

缓存超时

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

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

2、Redis功能测试角度

  • redis数据生效时,读取是否正确

  • redis数据不存在,能否正常从db中读取到正确的值,并正确写入Redis和返回给上层

  • 数据在redis和db中都不存在时的表现是否正常

  • 删除数据时,redis和db的数据是否一致

面试笔记

我也为大家整理了一套最新的软件测试系统学习教程,包括测试理论、Linux基础、MySQL基础、Web测试、接口测试、App测试、Python基础、Selenium相关、性能测试、LordRunner相关等

一、软件测试基础

软件测试的步骤是什么?
如何录制测试脚本?
应该考虑进行如何测试的测试方法
怎样估计测试工作量?
测试设计的问题
当测试过程发生错误时,有哪几种解决办法?
测试执行的问题
测试评估的目标
如何提高测试?
C/S模式的优点和缺点
B/S模式的优点和缺点
…...

3c82f41158444bcda15c822e5f8601ba.png

二、Linux  

grep和find的区别? grep 都有哪些用法?
查看IP地址?
创建和删除一个多级目录?
在当前用户家目录中查找haha.txt文件?
如何查询出tomcat的进程并杀掉这个进程,写出linux命令?
动态查看日志文件?
查看系統硬盘空间的命令?
查看当前机器listen 的所有端口?
…...

85b07614953a449583a02dee5352f86c.png

三、Python  

统计python源代码文件中代码行数,去除注释,空行,进行输出?
python调用cmd并返回结果?
冒泡排序
1,2,3,4 这4个数字,能组成多少个互不相同的且无重复的三位数,都是多少?
请用 python 打印出 10000 以内的对称数(对称数特点:数字左右对称,如:1,2,11,121,1221 等)
给定一个整数 N,和一个 0-9 的数 K,要求返回 0-N 中数字 K 出现的次数
判断 101-200 之间有多少个素数,并输出所有的素数
一个输入三角形的函数,输入后输出是否能组成三角形,三角形类型,请用等价类- 划分法设计测试用例
…...

4d29dda5375c46b49727deb0f22a4b1b.png

四、数据库

你用的Mysql是哪个引擎,各引擎之间有什么区别?
如何对查询命令进行优化?
数据库的优化?
Mysql数据库的操作?
优化数据库?提高数据库的性能?
什么是数据的完整性?
…...

8d0e3f2061714bb783e83dba438289bb.png

五、抓包与网络协议

抓包工具怎么用?
如何抓取https的包?如何抓取手机的包?
请求方式有哪些?
get跟post请求的区别?http跟https的区别?
......

afb3982076954fcb94b86a2b1e6d2d33.png

六、接口测试

什么是接口
如果模块请求http改为了https,测试方案应该如何制定,修改?
常用HTTP 协议调试代理I具有什么?详细说明抓取HTTPS协议的设置过程?
描述TCP/IP协议的层次结构,以及每一-层中重要协议
jmeter,一个接口的响应结果如下:
接口产生的垃圾数据如何清理
依赖第三方的接口如何处理
测试的数据你放在哪?
什么是数据驱动,如何参数化?
…...

192c573a99754dd1a76b9a64b563b5d4.png

七、接口自动化

为什么做接口自动化? 
你写了多少接口自动化用例?
比如说你接口的请求参数需要加密处理的,你们用的是什么加密方式,你加密怎么处理的? 
你查询出来返回结果是密文,密文你怎么测试?
......

67fbc0acd74346a88d0b4ddea23bbaa0.png

八、UI自动化与app测试

ui 自动化怎么测试?
自动化测试环境的搭建是怎样的? 
seleniun 库中用过哪些函数?
定位元素的8个方法是什么?
css 定位的方法?
adb  的作用是? 
App  稳定怎么做的? Monkey怎么用p (App  稳定测试 )?
App 弱网测试怎么做的?
......

d8c5f03dd09747d9baace68c9ace64d6.png

60cccc09eeb14b8b80542ada7a598767.png

九、Pytest框架与Unittest框架

Unittest 框架有哪些组件? 
Unittet st 框架如何使用? 
pytest 框架如何去生成测试报告?
bytes 如何去运行多个文件或者整个目录?
pytest  框架如何去运行上次失败的测试用例?
pytest  运行用例,用例命名规则有哪些? 
......

d46ee47614e446e4883dc5627805052b.png

d3cb4f9f23884541a12340ccafe279f8.png

十、性能测试

你认为性能测试的目的是什么?做好性能测试的工作的关键是什么?
服务端性能分析都从哪些角度来进行?
如何理解压力测试,负裁测试以及性能测试?
如何判断是否有内存泄漏及关注的指标?
描述软件产“生内存泄露的原因以及检查方式。(可以结合- 种开发语言进行描述)
简述什么是值传递,什么是地址传递,两者区别是什么?
什么是系统瓶颈?
…...

7fd51d29aa264bdeaef4f9a23ab30bd8.png

  
十一、人力资源 

你的测试职业发展是什么?你自认为做测试的优势在哪里?
为什么我们应该录取你?
请谈谈你个人的最大特色。
一个测试工程师应具备那些素质和技能?
为什么选择测试这行?
如果我雇用你,你能给部门带来什么贡献?
…...

c0eafbcdb42742cbbfbee4e75c2ff530.png

 整份文档一共有将近 200 页,全部为大家展示出来肯定是不太现实的,为了不影响大家的阅读体验就只展示了部分内容,还望大家海涵,希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习!

784b1896e9b943e188e13e5b8514aeab.jpeg

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

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

相关文章

JavaEE初阶:多线程 - Thread 类的基本用法

上次我们了解了多线程的五种创建方法,今天来学习Thread的基本用法。 目录 run和start Thread常见的构造方法 Thread的几个常见属性 后台线程 是否存活 线程终止 1.使用标志位 2.使用Thread自带的标志 等待线程 run和start 首先需要理解Thread的run和star…

小程序商品如何设置指定的配送规则

小程序配送规则包括商品是否包邮、包邮金额、起总金额、计费方式、配送区域等,这些规则直接影响到商家的运营和用户的购物体验。下面将详细介绍如何给商品设置配送规则。 1. 添加配送规则。商家在配送设置->配送规则,添加配送规则。配送规则支持的功…

openpnp - 做一个抛料盒

文章目录 openpnp - 做一个抛料盒概述效果图零件 - 抛料盒主体零件 - 磁铁仓盖板END openpnp - 做一个抛料盒 概述 8mm散料飞达做回来了, 上面用的长方形磁铁(4x6x10mm)透过0.8mm的3D打印薄壁, 和固定铁板的吸力很大, 用磁力固定的非常好. 正好缺一个抛料盒, 就按照散料飞达的…

Vue中拖动排序功能,引入SortableJs,前端拖动排序。

背景: 作为一名前端开发人员,在工作中难免会遇到拖拽功能,分享一个github上一个不错的拖拽js库,能满足我们在项目开发中的需要,支持Vue和React,下面是我在vue后台项目中中使用SortableJS的使用详细流程&am…

现代C++:使用 shared_from_this 防止 this 提前被释放

首先概括一下shared_from_this的作用:可以在类的成员函数中直接通过this得到指向当前所在对象的shared_ptr的智能指针,具体操作如下。 使用方法 设需要提供shared_from_this方法的类为C0定义为类,首先需要将C0定义为 std::enable_shared_fr…

NCAA棒球介绍·棒球1号位

NCAA棒球介绍 1. NCAA简介 NCAA(National Collegiate Athletic Association)的历史与发展 NCAA,这个拥有94年悠久历史的体育联盟,从一所校际体育比赛,发展成为世界上最大的大学体育组织,NCAA的发展历程充…

.NET Core发布到IIS

项目介绍 1、开发工具Visual Studio 2017,语言C#,SQL SERVER,WIN10 2、本地IIS,手机上或其他用户在和本地在同一个局域网内访问,同时要把防火墙关掉 3、IIS全名Internet Information Services,用来发布网站 先决条件 安…

[UE4][C++]使用qrencode动态生成二维码

一、使用CMake编译x64版本qrencode 下载地址 GitHub - fukuchi/libqrencode: A fast and compact QR Code encoding libraryA fast and compact QR Code encoding library. Contribute to fukuchi/libqrencode development by creating an account on GitHub.https://github.…

同创永益郑阳|与数智化共舞·业务稳定性保障新动力

2023年8月2日,由北大创新评论主办的2023 Inno China中国产业创新大会-保险产业创新论坛在京举办。本次论坛由同创永益、青牛软件、DaoCloud道客联合主办,INNO创新家、产业集群发展提供战略支持,未名数创承办,邀请到了学术专家、行…

抖音怎样发才有更多人看?四川玖璨电商

抖音是一款非常受欢迎的短视频应用程序,如果你想让更多人看到你的视频,那么你需要学习如何正确地使用抖音平台。在本文中,我们将提供一些有用的建议,以帮助你增加你的观众数量,让你的视频更加受欢迎。 1. 精心选择主题…

配置/var/tmp/fstab 权限/配置用户账户/查找文件/查找字符串

目录 配置/var/tmp/fstab 权限 配置用户账户 查找文件 查找字符串 创建归档 配置/var/tmp/fstab 权限 配置文件权限,将文件 /etc/fstab 复制到 /var/tmp/fstab 。配置 /var/tmp/fstab 的权限以满足 如下条 件: /var/tmp/fstab 属于 root 用户…

光致发光荧光量子产率测试系统

荧光量子产率,是单位时间(s)内,发射荧光的光子数与吸收激发光的光子数之间的比值,符号φf。它表示物质将吸收的光能转变成荧光的能力,是荧光物质一个最基本而重要的参数。φf值的大小与物质的化学结构紧密相…

ARM64是什么意思?与x86有什么区别?

你知道ARM64是什么意思?与x86有什么区别?哪款堡垒机支持ARM64架构?且听我道来。 ARM64是什么意思? 【回答】:ARM64是CPU构架的一种,通常用于手机、平板等CPU,目前笔记本电脑也会采用ARM64构架…

SpringBoot案例 调用第三方接口传输数据

一、前言 最近再写调用三方接口传输数据的项目,这篇博客记录项目完成的过程,方便后续再碰到类似的项目可以快速上手 项目结构: 二、编码 这里主要介绍HttpClient发送POST请求工具类和定时器的使用,mvc三层架构编码不做探究 pom.x…

磁力线试验+多图

今天要磨制一个钢针工具。磨下来很多的铁屑,灵机一动,何不来试验一下磁铁的磁力线。这可是难得的材料。 下放7颗强力磁铁,可见强力磁铁的磁力线非常集中。 下放直径4CM的喇叭磁铁 强力磁铁U型铁 强力磁铁E型铁氧体磁芯,可见磁力线…

项目管理工具和方法有哪些:了解项目管理的必备工具和有效方法

先谈谈什么是项目管理,简单直白,就是对项目进行管理。项目管理涉及有效的计划和对工作的系统管理,但很多工具可以使项目管理更有效、更高效。比如,Zoho Projects项目管理工具。 1.项目合理拆解 当确定了项目目标后,无疑…

夏季用电高峰,智慧路灯杆如何助力节能减排

近年来,气温对用电的影响越发突出,持续高温拉动用电负荷快速增加,导致部分地区的电力供需偏紧形势进一步加剧。据媒体报道,今年夏季电力供需形势仍旧紧张,包括安徽、四川、重庆、广东等多地发出节电倡议,包…

驱动 实现三个灯的亮灭

1、编写LED灯的驱动,可以控制三个灯,应用程序中编写控制灯的逻辑,要使用自动创建设备节点机制 head.h #ifndef __HEAD_H__ #define __HEAD_H__#define PHY_LED1_MODER 0x50006000 #define PHY_LED1_ODR 0x50006014 #define PHY_LED1_RCC 0x…

解决git reset --soft HEAD^撤销commit时报错

今天在使用git回退功能的时候,遇到以下错误: 解决git reset --soft HEAD^撤销commit时报错 问题: 在进行完commit后,想要撤销该commit,于是使用了git reset --soft HEAD^命令,但是出现如下报错&#xff1…