以下是 Redis 测试 的详细步骤和方法,涵盖功能验证、性能测试、高可用性测试和安全测试,适用于开发、运维和测试人员全面评估 Redis 的稳定性和性能。
一、测试目标
功能验证:确保 Redis 的基本功能(如字符串、哈希、列表、集合、有序集合)正常工作。
性能测试:评估 Redis 在高并发、大规模数据场景下的吞吐量和延迟。
高可用性测试:验证主从复制、哨兵模式、集群模式的故障转移能力。
持久化测试:确保 RDB 和 AOF 持久化机制在重启后数据不丢失。
安全测试:验证密码保护、访问控制等安全策略的有效性。
二、测试环境准备
安装 Redis
单节点测试:redis-server(默认端口 6379)。
集群测试:配置主从复制、哨兵模式或 Redis Cluster。
工具准备
Redis 命令行工具:redis-cli
性能测试工具:redis-benchmark
自动化测试工具:Python(redis-py)、JMeter
监控工具:redis-cli info、redis-stat、Prometheus + Grafana
三、功能测试
1. 基本数据类型测试
步骤
字符串类型
哈希类型
列表类型
集合类型
有序集合类型
验证方法
检查返回值是否符合预期(如 OK、1 表示成功)。
使用 redis-cli type <key> 验证数据类型。
2. 过期时间测试
步骤
验证方法
等待过期时间后,GET 命令应返回 nil。
3. 事务测试(MULTI/EXEC)
步骤
验证方法
事务中的所有命令应按顺序执行,结果一致。
四、性能测试
1. 使用 redis-benchmark 测试
步骤
单线程测试
多线程测试
参数说明
-n:请求总数。
-c:并发客户端数。
-t:测试命令(如 set,get)。
-P:管道化请求数。
-k:是否启用 Keepalive(1 表示启用)。
验证方法
观察吞吐量(requests per second)和平均延迟(latency)。
比较不同并发数下的性能差异。
2. 使用 JMeter 测试
步骤
添加 TCP 请求,配置 Redis 的 IP 和端口。
使用 CSV 数据文件 提供测试数据(如 key1, key2)。
添加 监听器(如 View Results Tree、Aggregate Report)。
运行测试并分析结果。
五、高可用性测试
1. 主从复制测试
步骤
配置主从节点(redis.conf 中添加 slaveof <master-ip> 6379)。
在主节点写入数据:
在从节点读取数据:
验证方法
从节点应同步主节点的数据。
使用 INFO replication 检查复制状态。
2. 哨兵模式测试(故障转移)
步骤
配置哨兵模式(sentinel.conf)。
模拟主节点故障(关闭主节点进程)。
检查哨兵是否自动选举新的主节点。
在客户端连接哨兵地址,验证读写是否正常。
验证方法
使用 redis-cli -h sentinel -p 26379 info sentinel 查看故障转移状态。
3. 集群模式测试
步骤
使用 redis-cli --cluster create 创建集群。
向不同节点写入数据:
模拟节点故障(关闭某个节点),观察数据是否自动迁移。
验证方法
使用 CLUSTER NODES 检查节点状态和槽位分配。
六、持久化测试
1. RDB 持久化测试
步骤
配置 redis.conf:
写入数据并等待触发 RDB 快照。
停止 Redis 服务并重启,检查数据是否恢复。
验证方法
使用 redis-cli keys * 验证数据是否保留。
2. AOF 持久化测试
步骤
配置 redis.conf:
写入数据并检查 AOF 文件大小。
停止 Redis 服务并重启,检查数据是否恢复。
验证方法
使用 redis-check-aof 工具验证 AOF 文件完整性。
七、安全测试
1. 密码保护测试
步骤
配置 redis.conf:
使用 redis-cli 连接并尝试未授权访问:
使用密码连接:
验证方法
未授权访问应返回 -NOAUTH 错误。
2. 访问控制测试(ACL)
步骤
配置 ACL 用户(redis.conf 或 ACL SETUSER 命令)。
使用不同用户权限测试读写操作。
检查是否限制了特定命令或数据库。
验证方法
低权限用户应无法执行高危命令(如 FLUSHALL)。
八、监控与日志分析
实时监控
日志分析
检查 redis-server 日志文件(默认 redis.log)。
使用 grep 过滤错误或警告信息。
九、测试报告示例
测试类型 结果 备注
基本功能测试 通过 所有数据类型操作正常
性能测试(100并发) 吞吐量 100k/s 平均延迟 0.5ms
主从复制测试 通过 从节点同步主节点数据
AOF 持久化测试 通过 重启后数据完整恢复
十、注意事项
生产环境测试:避免在生产环境中直接运行高负载测试,建议使用测试集群。
数据隔离:测试数据应与生产数据隔离,使用独立的 Redis 实例或数据库。
工具选择:根据测试目标选择合适的工具(如 redis-benchmark 用于性能测试,redis-cli 用于功能验证)。
通过以上步骤和方法,可以全面验证 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库来做
点击查看代码
没有python环境的话,用shell脚本实现自动化测试redis
点击查看代码
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,平均响应时间等
2、Redis功能测试角度
redis数据生效时,读取是否正确
redis数据不存在,能否正常从db中读取到正确的值,并正确写入Redis和返回给上层
数据在redis和db中都不存在时的表现是否正常
删除数据时,redis和db的数据是否一致
缓存增加/更新功能是否正确,查看缓存数据是否正确
增加相关日志,查看日志
后门接口工具
使用命令行,memcached和reids可以登录后,直接查看
缓存删除
缓存有效,验证相关业务功能
缓存被删除,验证相关业务功能
缓存过期失效,memcached 和redis 可以设置失效时间,查看失效时间有没有,对不对
超量淘汰机制:缓存达到上限怎么处理
缓存穿透
缓存雪崩
redis缓存服务停掉
缓存超时
缓存数据被误修改后,快速恢复到指定版本
缓存数据被误删除后,快速恢复数据
性能测试关键指标
Redis 性能测试关注在不同负载下的表现,主要考察以下指标:
吞吐量(Throughput, QPS):单位时间内处理的请求数(一般指每秒查询数 QPS)。这是衡量 Redis 性能的核心指标之一,多数文档和厂商给出的 Redis 性能规格都是以 QPS 表示。
响应时间(Latency):每次操作的延迟,通常统计平均延迟(Avg)、百分位延迟(如 p50、p95、p99)等。面试时可提到关注中位延迟和尾延迟,以评估系统稳定性。
并发能力:Redis 能够同时支持的并发客户端数或并发连接数。可以通过压测工具设置并发数 (-c 参数) 测试系统在高并发下的性能。
资源使用情况:监控 CPU 使用率、内存占用、网络带宽等。尤其在高负载时,需要关注 Redis 进程是否因资源瓶颈而限制性能。
负载稳定性:在长时间或循环压测下,观察性能是否下降(如因为 AOF 重写、内存碎片化、GC 等导致的延迟波动)。
实际测试时,可模拟不同场景:冷启动(空缓存)和热启动(缓存预热)下的性能对比;使用不同大小的数据;并发客户端逐渐加压等。