redis测试哪些内容

📅 2026/7/5 8:08:01
redis测试哪些内容
Redis 专项测试点剔除基础CRUD业务功能聚焦线上故障、资损、数据错乱高频场景基础功能1、缓存数据存储逻辑的合理性。缓存数据写入的正确性以及缓存的写入数据格式是否合理。key一般使用业务名或数据库名作为前缀以冒号(:)分隔来构造 key 名不使用含义不清的 key 或特别长的 key命名中只能出现小写字母、数字、点(.)和冒号(。不要包含特殊字符如下划线、空格、换行、单双引号以及其他转义字符value禁止超过 10KB 的 String 类型的大 key防止网卡流量、慢查询。非 String 类型的大 key不要使用 del 删除要使用 hscan、sscan、zscan 方式渐进删除。2、缓存读取逻辑的合理性。有缓存要优先读缓存无缓存查询数据库并回写缓存。校验数据在缓存和 DB 中都存在时系统功能是否正常校验数据在 DB 存在但缓存中不存在时系统功能是否正常校验数据在缓存和 DB 中都不存在时系统功能是否正常验证 DB 返回的数据异常时没有去缓存**3、缓存更新逻辑的合理性。**什么情况下要更新缓存以及缓存失效后是否会更新缓存内容。缓存的更新策略1.先更新数据库再更新缓存2.先更新缓存再更新数据库3.先淘汰缓存再更新数据库4.先更新数据库再淘汰缓存。推荐**4、缓存时间设置的合理性。**缓存时间设置太短会导致频繁访问数据库时间设置太长一方面会占用过多内存造成资源浪费另一方面会造成用户访问到的一直是老数据。因此要根据业务数据的实际更新频次设置合理的过期时间。一、缓存和db一致性专项资损/用户数据串号核心- 数据更新策略先更新数据库再更新redis如果在更新完数据库后更新 Redis 缓存时出现故障比如网络问题、Redis 服务宕机等会导致 Redis 缓存数据和数据库不一致后续读取缓存就可能获取到旧数据。先更新redis再更新数据库同样存在更新 Redis 后更新数据库失败导致的不一致风险比如数据库更新时发生约束冲突等异常使得数据不一致。先删除缓存再更新数据库删除 Redis 缓存 key执行 SQL 更新 DB问题并发读写会出现脏数据并发场景线程A删缓存线程B查询数据缓存失效读旧DB数据写入缓存线程A更新DB完成结果缓存存了旧数据长期不一致直到缓存过期。先更新数据库再删除缓存执行 SQL 更新 DB删除 Redis 缓存 key理论脏数据窗口极小并发读写线程B查询缓存命中拿到旧值短暂线程A更新DB线程A删除缓存下一次查询会重新加载新数据。只有一种极端脏数据场景查询刚好发生在「DB更新完成、缓存删除前」只会产生极短时间脏数据下次访问自动修复。- 合理的缓存失效策略根据业务数据的变更频率等因素为不同类型的缓存数据设置合适的固定失效时间比如对于频繁更新的数据设置较短的失效时间如几分钟而相对稳定的数据设置较长的失效时间如数小时甚至一天。使用事务机制侵入性强并发性能不高分布式事务如seata当 MySQL 和 Redis 在分布式环境下协同工作比如跨多个服务、不同数据库实例等情况可以采用分布式事务框架如 Seata来协调 MySQL 和 Redis 之间的操作保证整个操作流程的一致性。- 进阶优化定期对 Redis 缓存和 MySQL 数据库的数据进行对比校验可以通过数据对账等方式一旦发现不一致的情况根据预先设定的规则进行数据补偿操作使两者恢复一致。例如以数据库的数据为准将不一致的缓存数据进行修正或者重新加载。更新db后缓存删除失败兜底重试删除本地重试 延迟消息二次删除、消息队列异步延迟删缓存推荐极致强一致业务代码只更新数据库不操作缓存基于 binlog 异步删缓存Canal适合高并发、高一致性场景缓存延时双删兼顾极致严谨延迟 N 毫秒根据业务查询耗时再次删除缓存作用覆盖更新期间并发读写入旧缓存的极端场景进一步降低脏数据窗口。二、缓存穿透、击穿、雪崩三大经典风险缓存穿透大量不存在的Key非法商品ID、无效用户绕过缓存直查DB压垮数据库校验空值缓存、布隆过滤器拦截逻辑。缓存击穿热点Key过期瞬间海量请求打DB校验互斥锁、永不过期、逻辑过期方案是否生效。缓存雪崩大量Key集中同时过期校验过期时间随机打散、分层过期、集群分片隔离。三、并发安全与共享对象污染对应你短信/Go协程数据错乱问题共享可变对象并发读写缓存Value为Map/结构体取出后原地修改多线程/协程共用同一份内存对象参数交叉污染校验是否强制深拷贝副本。无锁并发更新热点Key库存、余额、优惠券计数并发自增/自减无分布式锁/乐观锁导致超卖、多发补贴Redis事务/管道并发冲突multi事务执行中途失败、部分命令执行成功数据不一致Lua脚本原子性校验复杂扣减逻辑用Lua校验脚本执行失败、超时、中断时数据不会错乱。四、过期、淘汰、内存满边界场景TTL过期失效业务配置缓存过期后缺失兜底查DB逻辑业务取空值造成计算错误内存淘汰策略触发Redis内存打满触发LRU/LFU淘汰热点业务Key大量请求降级查库校验淘汰后业务容错永久缓存无更新机制静态模板、活动配置永久不过期后台更新配置后缓存不刷新长期使用旧规则。五、分布式锁专项高并发资损高发锁过期时间小于业务执行时长锁提前释放并发穿透锁不可重入同一线程重复加锁死锁阻塞锁误删除A的锁被B的del命令删掉校验唯一标识UUID防误删集群锁同步延迟主节点加锁后宕机从节点未同步锁数据新主可重复加锁锁自动续期逻辑长任务看门狗续期中断锁提前失效。六、Redis高可用集群故障场景主从切换、节点宕机主库宕机切换从库数据短暂缺失、同步延迟产生脏读分片集群扩容/缩容、槽位迁移Key迁移过程中读写丢失、读取空数据网络分区脑裂客户端与主节点断开主从各自接受写入数据分裂冲突读写分离延迟读从库读到滞后旧数据并发业务计算出错。七、网络、超时、异常链路测试1. Redis连接超时、断连、端口不可达需要有降级策略校验降级逻辑缓存异常是否自动查询DB不直接报错/使用空脏数据2. 命令执行超时、管道批量命令阻塞大批量mget/mset超大key阻塞线程业务超时3. 连接池耗尽未释放连接、连接池配置过小大量请求阻塞等待连接4. 序列化/反序列化异常对象嵌套、特殊字符、空值、日期类型序列化失败缓存读取数据残缺。八、大Key、热Key性能与数据风险大Key风险超大字符串、超大Hash/List读写阻塞Redis命令超时校验拆分、裁剪逻辑热Key热点访问单个商品库存、活动模板被并发打爆CPU打满、命令排队校验本地二级缓存、分片隔离、缓存预热机制批量操作边界hgetall、lrange全量拉取海量数据内存溢出、接口超时。九、数据持久化与丢失风险RDB/AOF持久化配置故障宕机重启丢失一段时间写入数据缓存与DB不一致AOF刷盘策略everysec/always切换极端断电丢失数据业务是否可自动补偿刷新缓存持久化文件损坏Redis启动失败缓存全失效。十、原子计数、限流器、计数器场景专项incr/decr并发扣减无兜底校验导致库存负数、发放超额权益分布式限流计数器限流窗口跨边界、过期重置逻辑错误限流失效令牌桶/漏桶实现异常流量突增无拦截超量下单。十一、特殊业务场景本地缓存 Redis 二级缓存本地缓存脏数据Redis已更新但本地未刷新多实例数据不一致本地缓存共享可变对象并发修改参数串用户Redis缓存失效后大量请求同时加载本地缓存产生并发重复计算。十二、运维边界场景Key清空、flushdb/flushall、批量删除热点Key数据备份恢复旧缓存覆盖最新业务数据权限管控未做密码校验、高危命令开放恶意清空缓存监控告警缺失场景缓存命中率过低、大Key、连接池满无告警。分类精简汇总方便测试用例分组缓存双写一致性更新DB缓存并发脏读缓存三大问题穿透、击穿、雪崩并发安全共享可变对象污染、无锁并发扣减、Lua事务分布式锁全场景风险资损核心过期淘汰、内存打满边界集群高可用主从切换、槽迁移、脑裂网络异常、连接池、超时降级逻辑大Key、热Key性能阻塞持久化宕机数据丢失二级缓存本地缓存Redis数据隔离分布式计数器、限流组件异常运维高危操作清空、恢复、批量删Key