news 2026/5/15 20:44:37

Redis在使用中会遇到哪些坑?如何规避?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Redis在使用中会遇到哪些坑?如何规避?

用Redis踩过的坑,说几个印象深刻的。


大Key,Redis性能杀手第一名。

一个String存了10MB的JSON,一个Hash存了100万个field。你DEL这个Key的时候,整个Redis就卡住了。

为什么?Redis是单线程。你删一个大Key,可能要几百毫秒。这几百毫秒内所有请求都在排队等着。

更坑的是大Key过期。Redis定期清理过期Key,清到你那个大Key的时候,直接卡一下。你可能发现服务每隔一段时间抖一下,查半天才发现是这个原因。

规避方法:单个Key别超过10KB,大数据拆小数据。删大Key用UNLINK不要用DEL,UNLINK是后台异步删的。


热Key,打爆单节点。

秒杀商品的库存、微博热搜、爆款直播间的在线人数。所有流量打同一个Key。

Redis Cluster按Key分片,一个Key只落一个节点。你集群100个节点也没用,热Key那个节点照样被打爆。

解决办法就是打散。hot_key变成hot_key_1hot_key_10,读的时候随机选。或者应用层加本地缓存,热数据缓存1秒,大部分请求就不用打Redis了。


缓存一致性,没有银弹。

先更新DB再删缓存?删缓存失败怎么办?

延迟双删?延迟多久合适?太短没用,太长浪费时间。

想了各种方案,最后发现都有漏洞。

本质问题是:缓存和数据库是两个独立存储,没有分布式事务,必然有不一致的窗口期。

你能做的是缩短这个窗口,不是消灭它。想清楚业务能容忍多久的不一致。金融场景不能容忍?那就别用缓存。电商展示几秒不一致无所谓?Cache Aside够用。


穿透、击穿、雪崩。

面试八股文三连,但真遇到还是能搞死人。

穿透:查不存在的数据,缓存没有DB也没有,每次都打DB。恶意攻击常用这招。解决:布隆过滤器,或者缓存空值。

击穿:热Key过期那一瞬间,几万请求同时打到DB。解决:热Key不设过期,或者加锁只让一个请求去加载。

雪崩:大量Key同时过期,或者Redis挂了。解决:过期时间加随机偏移,Redis做高可用。


分布式锁,看起来简单,坑多。

最基本的坑:锁没设过期时间,进程挂了锁永远不释放。

进阶的坑:锁过期了业务没执行完,另一个进程拿到锁了,两个进程同时跑。

更隐蔽的坑:DEL释放锁的时候没判断是不是自己的锁,把别人的锁删了。

正确做法:SET key value NX EX,value用UUID。释放锁用Lua脚本,先判断是不是自己的再删:

ifredis.call("get",KEYS[1])==ARGV[1]thenreturnredis.call("del",KEYS[1])elsereturn0end

持久化。

RDB做快照要fork子进程。数据量大的时候fork很慢,fork期间主进程阻塞。

AOF文件越来越大,rewrite的时候也要fork。

建议:主节点用AOF,appendfsync everysec。从节点开RDB做冷备。别让RDB和AOF rewrite同时触发。


集群模式的坑。

MGET、事务、Lua脚本,要求所有Key在同一个slot。跨slot直接报错。

解决:Key加hash tag。{user_123}_profile{user_123}_orders,花括号内的部分决定slot,这俩就能放一起操作。

还有主从切换会丢数据。Redis主从是异步复制,主节点挂了,没同步到从节点的数据就没了。不能接受就上WAIT命令,但性能会受影响。


踩这些坑的根本原因,是把Redis当成了它不是的东西。

它不是数据库,重要数据别只存Redis。
它不是消息队列,虽然有Stream,专业的事交给Kafka。
它就是个缓存,用来解决"快"的问题。

想清楚你要它干什么,坑就少一半。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/15 9:44:50

深度学习抠图实践:Rembg在印刷品中的应用

深度学习抠图实践:Rembg在印刷品中的应用 1. 引言:智能万能抠图 - Rembg 在印刷、出版和数字内容生产领域,图像去背景是一项高频且关键的预处理任务。传统方法依赖人工在Photoshop等工具中手动描边或使用魔棒工具,不仅效率低下&…

作者头像 李华
网站建设 2026/5/10 8:27:10

Qwen2.5-7B推理实战:用vLLM+Gradio快速搭建交互式网页应用

Qwen2.5-7B推理实战:用vLLMGradio快速搭建交互式网页应用 一、前言 随着大语言模型(LLM)技术的飞速发展,如何高效部署并提供用户友好的交互界面成为落地应用的关键环节。阿里云推出的 Qwen2.5-7B-Instruct 模型在知识广度、编程…

作者头像 李华
网站建设 2026/5/3 15:45:27

收藏!大模型岗位薪资有多香?技术人转岗入局指南

作为常年扎根技术圈、紧盯职场风向的老程序员,我有个固定习惯——每隔一段时间就会去Boss直聘等招聘平台,深挖大模型相关的岗位信息。每次点开薪资详情页,都忍不住感慨:这薪资水平,简直是技术岗里的“黄金赛道”&#…

作者头像 李华
网站建设 2026/5/14 15:36:40

ResNet18保姆级教程:0配置云端镜像,小白也能玩转AI

ResNet18保姆级教程:0配置云端镜像,小白也能玩转AI 引言:AI图像识别原来这么简单 想象一下,你刚拍了一张照片发朋友圈,手机相册自动帮你标记出"猫咪""公园""冰淇淋"——这就是图像识别…

作者头像 李华
网站建设 2026/4/18 8:48:49

互联网大厂Java面试最常被问的1000道题目及参考答案

Java学到什么程度可以面试工作? 要达到能够面试Java开发工作的水平,需要掌握以下几个方面的知识和技能: 1. 基础扎实:熟悉Java语法、面向对象编程概念、异常处理、I/O流等基础知识。这是所有Java开发者必备的基础,也…

作者头像 李华
网站建设 2026/5/2 21:50:05

ResNet18快速验证方案:1小时1块立即出结果

ResNet18快速验证方案:1小时1块立即出结果 引言:产品经理的紧急救星 "明天上午10点汇报AI方案可行性,今晚必须跑通ResNet18测试!"当你接到这个任务时,家里那台老旧的笔记本电脑可能连PyTorch都装不上。别慌…

作者头像 李华