Redis缓存
如果完全没听过缓存这个概念,测试会遇到什么问题呢?
问题场景
懂缓存,但测试过程没用上
- 刚新增了一条数据,但是,列表/报表上没有更新数据;
- 数据没更新,提交了BUG,被开发打回,说是缓存还没更新;
- 执行某条用例,要修改数据,看列表/报表的数据关联变化;
- 给带缓存的业务功能模块,实现自动化测试;
痛点
痛点 | 表现 |
---|---|
难以定位缺陷 | 1、数据没更新,可能缓存没更新造成 |
2、数据没更新,可能是功能上的缺陷 | |
测试效率低下 | 1、等待缓存更新时间过长 |
2、让开发进行Delete/Reload,损耗沟通成本 | |
自动化测试无法覆盖 | 1、缓存导致数据滞后更新 |
2、sleep时间过长,脚本执行效率低下 | |
缺少缓存的测试覆盖 | 1、缓存的设定是否与实际业务相符 |
2、缓存专项测试 |
Redis缓存
Redis 是一个高性能的key-value数据库
读的速度是110000次/s,写的速度是81000次/s
还提供list、set、zset、hash等结构存储
常为了降低数据库查询压力,而设计的Redis
数据库无法随时提供数据,或性能耗损极大
常为了减轻数据库写入压力,而设计的Redis,如浏览量。
步入正题
前置条件:
- 确定指定模块是用了Redis缓存
- 确定用了哪种缓存交互方式
- 拿到Redis的服务器地址
- 知道该模块存储在哪里/Key的值
连接Redis
找到功能模块的文件夹
把接口和缓存的KEY对应上
GET key
DEL key
EXISTS key
SET key value
TTL key
EXPIRE key seconds
LINDEX key index
终于解决了等待、沟通以及无法定位的问题
缓存击穿
- 是指查询一个一定不存在的数据,但是数据库没有把空值存到Redis上
- 应对方法:制造查询结果为空的方法,结合场景去测试,如果返回值为空存到了Redis,那么这个TTL不能太长,最长不能超过五分钟;
缓存雪崩
- 缓存集中在一段时间内失效,发生大量的缓存穿透,所有的查询都落在数据库上
- 应对措施:同一个页面的缓存不建议同一时间过期
- 利用该特性,可以给到服务器最真实的压力峰值