首页/数据/数据库速查/Redis 使用高频误区清单
Redis 运维与场景124 条

Redis 使用高频误区清单

从「当数据库用」到「KEYS 扫全库」:这些误区的共同点是上线不炸、流量上来才炸;开发评审与上线检查时对照排查。

数据库速查数据更新于 2026-10-13

为什么值得列成清单

这些误区的共同点是上线时都不炸,流量涨上来才炸。把它们整理成清单,用在开发评审、上线检查和事故复盘里,比每次现场救火划算得多。清单覆盖四个方向:使用定位(是否当数据库)、容量治理(TTL 与大 key)、性能红线(KEYS 与连接)、版本与集群约束。

高频误区清单

  • 当主存储用:持久化存在丢数窗口,权威数据必须落库
  • 缓存键没有 TTL:堆满后触发淘汰,热数据被冷数据挤掉
  • 大 key:百万元素的集合查一次卡一次,治理靠拆分与异步删除
  • 热 key:单分片 CPU 被打满,靠本地缓存、多副本或键打散
  • KEYS 扫全库:生产环境禁用,改用 SCAN 渐进遍历
  • 连接管理混乱:每请求新建连接或连接池上限过大,打满 maxclients
  • 忽略版本差异:LMPOP、ZINTERCARD、FUNCTION 等命令 7.0 才有
  • 缺集群意识:多键不在同槽会报 CROSSSLOT,键设计要带 hash tag

上线前体检命令

上线前体检命令
redis-cli INFO clients | grep connected_clients
redis-cli INFO memory | grep -E "used_memory_human|maxmemory_human"
redis-cli INFO stats | grep -E "evicted_keys|expired_keys"
redis-cli --bigkeys -i 0.1      # 低峰或副本执行,-i 用于限速
redis-cli --hotkeys             # 需要 LFU 淘汰策略才有效
redis-cli SLOWLOG GET 10
redis-cli CLUSTER INFO | grep state

误区与正确做法

误区后果正确做法
当数据库用持久化窗口内丢数据不可恢复权威数据落库,缓存只做加速
无 TTL内存被冷数据占满,热数据被淘汰缓存键必须有 TTL 或显式豁免
大 key单次操作阻塞单线程拆分结构,删除用 UNLINK 异步处理
热 key单分片或单节点压力集中多级缓存、读写分离、键打散
KEYS 模式匹配遍历全库阻塞数秒到数十秒用 SCAN 游标渐进遍历
--bigkeys 与 --hotkeys 都会遍历键空间:在主库高峰执行等于自己制造故障,安排在低峰或从库上执行。
容量估算不要用「平均大小乘键数」:过期键、内存碎片、复制缓冲区、AOF 缓冲区都会吃内存,实际占用通常明显高于估算值。
上线前做一次「命令可用性核对」:把代码里用到的 Redis 命令在目标版本上全部跑一遍,避免本地老版本测试通过、线上报 unknown command。

易错点

  • 上生产才发现命令不存在:本地版本较老,线上直接报 unknown command
  • 容量按平均大小乘键数估算:没算碎片与缓冲区,实际用量远超预期
  • 用 KEYS 做模糊查询:高峰期直接把实例卡死,影响所有业务
  • 把热 key 放在单个分片:后来再怎么扩容也分担不了这部分压力

数据来源与参考

  • Redis 官方文档: 延迟排查
  • Redis 官方文档: 内存优化

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌