当前位置: 首页 > news >正文

Redis缓存测试思路

一,什么是Redis

Redis是一个非关系型数据库,仅使用内存储存数据,避免了I/O的限制,显著提升了数据访问效率。
Redis可以用于缓存,订阅,消息队列,计数器(浏览数,播放数)。本文探讨redis缓存功能的测试。
Redis缓存是在服务端部署的一个非关系型数据库NOSQL,用于客户端和数据库DB直接的层级,客户端发出请求,先在redis中查找,redis中查寻不到再到达DB中查询。大大缓解了数据库的压力。
所以Redis的特性是速度快,响应快

Redis有几种基础数据类型:
1,string
2,hash哈希
3,list列表
4,set集合
5,zset有序集合

二,Redis缓存测什么

Redis缓存测试主要测试功能和性能两个方面

1,功能方面
1.1,测试点:
缓存中有缓存数据,正确获取缓存数据
在缓存中增加数据,删除数据,redis中缓存数据正确
缓存中没有缓存数据,redis从DB正确获取到缓存数据,并储存再redis中,然后返回正确的响应到客户端
缓存数据过期,redis重新获取DB缓存数据,并正确反映到客户端
缓存数据的过期时间正常生效,过期时间内,获取缓存数据,没有到DB的请求,过期后,redis没有缓存数据了
如果是删除缓存数据的设计,需要测试缓存数据响应到客户端以后,redit中缓存数据被删除
缓存到达上限,如何处理

2,性能测试
2.1,测试点:
redis停止服务,业务是否正常
redis缓存击穿,大量访问redis中不存在的值,会到DB去查询
redis缓存雪崩,在同一时间大量的缓存过期,对DB造成巨大访问压力
缓存数据到达上限,业务表现是什么,超量淘汰机制
缓存数据出问题时,redis数据能否正确快速回复数据
redis服务断开后回复,业务流程是否正常回复到redis查询

三,Redis怎么测

1,纯基础功能的测试,比如缓存读写的正确性,过期时间等,可以自己搭建本地的redis数据库来测试,不影响其他环境
测试点:
键值对 CRUD:SET写入后GET是否正确,DEL后是否删除;
数据结构操作:Hash 的HSET/HGET、List 的LPUSH/LRANGE、Set 的SADD/SMEMBERS等是否符合预期;
过期时间:设置EX/PX后,TTL是否正确,过期后是否无法读取;
覆盖行为:对已存在的键SET新值,是否覆盖旧值,过期时间是否重置。

2,验证业务系统和redis的集成效果(比如缓存更新逻辑,缓存穿透,缓存雪崩等),需要用专门的测试环境
通常是运维团队搭建,与开发的业务系统配套,规模比较小。
测试时,问开发要连接信息:主机地址,端口,密码,专用于测试的数据库的编号
登录redis: cmd命令:redis-cli -h 主机地址 -p 端口 -a 密码 -n 数据库编号
登录后,使用redis命令来测试

3,UAT环境管理比较严,要注意数据清理,避免批量处理数据,测试完要清理数据,要和运维确认有数据备份

4,自动化测试的话,用python的redis-py库来做

点击查看代码
import redis# 连接Redis
r = redis.Redis(host='redis-test.example.com',port=6379,password='test123',db=1,decode_responses=True  # 自动解码为字符串(默认返回bytes)
)# 执行操作(如测试缓存设置与过期)
r.set('test_key', 'test_value', ex=10)  # 设置10秒过期
print(r.get('test_key'))  # 输出'test_value'
import time
time.sleep(11)
print(r.get('test_key'))  # 输出None(已过期)

没有python环境的话,用shell脚本实现自动化测试redis

点击查看代码
#!/bin/bash# 1. 配置Redis连接信息(根据实际环境修改)
REDIS_HOST="localhost"
REDIS_PORT=6379
REDIS_PASSWORD=""  # 无密码则留空
REDIS_DB=0
KEY_PREFIX="test_expire_key_"
TOTAL_KEYS=1000
BASE_EXPIRE=10  # 基础过期时间(秒)
CHECK_INTERVAL=3  # 检查间隔(秒)
MAX_CHECKS=6      # 最大检查次数# 2. 批量创建带过期时间的键
echo "开始创建${TOTAL_KEYS}个带过期时间的键..."
for ((i=0; i<TOTAL_KEYS; i++)); dokey="${KEY_PREFIX}${i}"# 过期时间:10-15秒(随机值)expire_seconds=$((BASE_EXPIRE + RANDOM % 6))  # RANDOM%6生成0-5的随机数# 执行SET命令(带密码时需加 -a 密码)if [ -z "$REDIS_PASSWORD" ]; thenredis-cli -h $REDIS_HOST -p $REDIS_PORT -n $REDIS_DB SET $key "value_$i" EX $expire_secondselseredis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD -n $REDIS_DB SET $key "value_$i" EX $expire_secondsfi# 每100个键打印一次进度if ((i % 100 == 0)); thenttl=$(redis-cli -h $REDIS_HOST -p $REDIS_PORT -n $REDIS_DB TTL $key)echo "键 $key 设置成功,过期时间:${expire_seconds}秒,当前剩余TTL:${ttl}秒"fi
done# 3. 定期检查键的过期状态
for ((round=1; round<=MAX_CHECKS; round++)); docurrent_time=$(date +"%H:%M:%S")remaining=0expired=0# 随机抽查100个键(利用$RANDOM生成随机索引)for ((s=0; s<100; s++)); doi=$((RANDOM % TOTAL_KEYS))  # 生成0到TOTAL_KEYS-1的随机数key="${KEY_PREFIX}${i}"# 获取TTLif [ -z "$REDIS_PASSWORD" ]; thenttl=$(redis-cli -h $REDIS_HOST -p $REDIS_PORT -n $REDIS_DB TTL $key)elsettl=$(redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD -n $REDIS_DB TTL $key)fiif ((ttl > 0)); then((remaining++))else((expired++))fidoneecho "[$current_time] 第${round}次检查:抽查100个键,未过期${remaining}个,已过期${expired}个"sleep $CHECK_INTERVAL
done# 4. 清理测试数据
echo "清理测试键..."
for ((i=0; i<TOTAL_KEYS; i++)); dokey="${KEY_PREFIX}${i}"if [ -z "$REDIS_PASSWORD" ]; thenredis-cli -h $REDIS_HOST -p $REDIS_PORT -n $REDIS_DB DEL $keyelseredis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD -n $REDIS_DB DEL $keyfi
done
echo "测试完成"

5,redis可视化结果检查:用redis desktop manager RDM工具来查看

6,redis的性能测试工具 redis-benchmark自带工具,命令是:
(测试100个并发连接,共100000次请求的GET/SET性能)
redis-benchmark -h redis-test.example.com -p 6379 -a test123 -c 100 -n 100000 get set
输出结果会包含QPS,平均响应时间等

http://www.jsqmd.com/news/19577/

相关文章:

  • 权威调研榜单:无线电环形导轨配件生产厂家TOP3榜单好评深度解析
  • 086_尚硅谷_switch基本使用
  • Redis应用(Leo)
  • 1.51.0 mm LTCC低通,DC-3.7 GHz,带内插损≤0.6 dB,军工温宽——国产HT-LFCG-3700+(Pin-to-Pin替代LFCG-3700+)
  • 从零开始制作操作系统—— 最简单的操作系统内核
  • 【CSP出版 | 最快投稿后一个月见刊 | 检索稳定】2025年艺术、教育与管理国际学术会议(ICAEM 2025)- 第六期
  • 【LeetCode 每日一题】120. 三角形最小路径和——(解法二)自底向上 - 实践
  • HDFS Java api操作-cnblog
  • Pandas 深入学习【3】材料标准化处理 StandardScaler
  • web预览tif格式文件踩坑
  • 2025年靠谱的热水袋,国标热水袋厂家推荐及选择建议 - Di
  • STC32G144K246-视频级动画效果演示 - 指南
  • 电网不平衡条件下DFIG风力发电机动态建模与控制
  • 1.5-60 MHz 超宽带 20 dB 耦合器 H2SYDC-20-61HP+,0.4 dB 插损,-40~+85 C 军工级,成都恒利泰出品
  • PortSwigger web实验室-CSRF篇(BP靶场) - 实践
  • C#实现CRC8、CRC16、CRC32校验算法
  • 2025 年切纸机源头厂家最新推荐榜单:全自动 / 程控 / 大型等设备品牌评测,深度解析大鹏等企业实力
  • Kerberoasting攻击剖析:Active Directory中的密码破解漏洞
  • AI技术与IDS融合应用
  • 完整教程:leetcode_138 随机链表的复制
  • 成功案例分享|ArmSoM CM5赋能海洋保育,边缘AI守护鲸豚之声
  • 2025 年最新推荐走心机加工实力厂家排行榜:覆盖航空 / 医疗 / 汽车等多领域优质企业精选 不锈钢零件/高铁零件/精密数控走心机加工厂家推荐
  • KeyShot 2025最新安装包下载及详细安装教程,附永久免费中文安装包 KeyShot2025
  • 复矩阵的QR分解
  • 高校软件测试实训平台 | 教学实训一站式管理,助力高校软件测试人才培养
  • 2025 最新压滤机厂家推荐排行榜:景津装备领衔,隔膜 / 厢式 / 污泥专用设备权威榜单自动/污泥/化工/制药压滤机厂家推荐
  • Maven-继承与聚合 - 实践
  • 千疮百孔的心被恨与悲彻底剥离 Kill my memory 让我将快乐全忘记
  • 速尝鲜!PS 2026 新功能:移除工具 + 神经滤镜
  • 谎言 欺骗 鄙夷 如破碎瓦砾铺满地 利用陷害窒息莫名遭受唾骂遗弃