- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
Redis缓存高频面试题及答案
一、基础必问篇
Redis为什么能做到高性能?
核心是“内存操作+高效设计”:首先数据存在内存里,避免磁盘IO的慢速度;其次用单线程模型(处理命令时单线程),不用考虑线程切换开销,也不会有并发安全问题;最后靠IO多路复用(epoll/kqueue),能同时监听大量连接,哪怕成千上万的请求也能高效处理。比如业务里秒杀场景,Redis单线程也能抗住每秒几万的QPS。
Redis常用的数据结构有哪些?分别用在什么场景?
最常用的5种:
String:存简单值,比如用户token、商品库存(incr/decr原子操作很方便);
Hash:存对象类数据,比如用户信息(id对应name/age/phone,不用存整个JSON,改单个字段更高效);
List:做消息队列、排行榜(比如最新评论,lpush+rpop实现FIFO,lrange查前N条);
Set:去重、交集并集(比如用户标签去重,求两个用户的共同好友);
ZSet:有序排行榜(比如商品销量榜,score存销量,zrangebyscore按销量排序)。
Redis的过期键删除策略是什么?为什么这么设计?
三种策略结合用,平衡“内存占用”和“CPU消耗”:
惰性删除:只有访问过期key时才删,不浪费CPU,但可能让过期key占内存(比如冷门key过期了一直没访问);
定期删除:每隔一段时间(比如100ms)随机扫一部分过期key删掉,避免惰性删除的内存问题,也不会像“定时删除”那样频繁扫库耗CPU;
内存淘汰:如果内存满了,会按配置的淘汰策略(比如LRU最近最少使用)删key,保证Redis能继续服务。
实际配置里,一般会开定期删除+内存淘汰,比如电商缓存里,滞销商品的缓存过期后,定期删除能清理大部分,剩下的冷门key等惰性删除,内存满了再用LRU删最久不用的。
二、缓存问题篇(面试重点)
什么是缓存穿透?怎么解决?
场景:请求查询一个不存在的数据(比如查id=-1的商品),缓存里没有,每次都打到数据库,可能把DB压垮。
解决办法:
空值缓存:查不到的key,在缓存里存个空值(比如),并设短过期时间(比如5分钟),避免同一无效请求反复查DB;
布隆过滤器:把所有存在的key提前存到布隆过滤器里,请求先过过滤器,不存在的直接返回,不用查缓存和DB。比如电商商品ID,布隆过滤器能挡住99%以上的无效请求,但要注意有极小误判率(可能把不存在的key判为存在,不过后续查缓存/DB还是会返回空,影响不大)。
缓存击穿和缓存雪崩有什么区别?分别怎么处理?
缓存击穿:单个热点key过期时,刚好有大量请求进来,全打到DB(比如某网红商品的缓存过期,瞬间几百个请求查这个商品)。
解决:热点key永不过期(业务允许的话);或者加互斥锁(比如用Redis的setnx,只有拿到锁的请求去查DB更新缓存,其他请求等100ms再查缓存)。
缓存雪崩:大量key同时过期,或者Redis集群宕机,导致请求全压DB(比如凌晨2点缓存批量过期,刚好赶上定时任务查数据)。
解决:key过期时间加随机值(比如原本过期1小时,改成1小时±10分钟,避免同时过期);Redis集群部署(主从+哨兵,主节点挂了从节点顶上);DB加限流(比如用GuavaRateLimiter,避免瞬间超负载)。
缓存和数据库的数据一致性怎么保证?
没有绝对一致,看业务容忍度,常用两种方案:
先更DB,再更缓存(或删缓存):比如更新商品价格,先改DB的price,再把缓存里的商品key删掉(下次请求查缓存时miss,去DB查最新的再更缓存)。注意:删缓存比更缓存好,避免两个请求并发更新时,出现“DB改了A,缓存改了B,又被另一个请求改回A”的问题。
延迟双删:如果怕“更DB后删缓存”失败(比如删缓存时网络断了),可以加个延迟任务(比如用RabbitMQ),1秒后再删一次缓存,确保缓存里的旧数据被清掉。适合对一致性要求高的场景,比如金融交易金额。
三、进阶篇
Redis的持久化机制有哪两种?怎么选?
两种核心方式:
RDB:按指定时间间隔(比如5分钟存一次),把内存里的数据快照存到磁盘(.rdb文件)。优点是恢复快、对性能影响小(fork子进程写,主进程不阻塞);缺点是丢数据风险高(比如5分钟内Redis宕机,这5分钟的数据没了)。
AOF:把每一条写命令(比如set、incr)追加到日志文件(.aof),Redis重启时重新执行命令恢复数据。
您可能关注的文档
最近下载
- 风电叶片真空灌注工艺维修方案.docx
- 宁夏《建筑工程资料管理规程》DB64_266-2018.pdf
- 2025年低压电工作业证理论考试笔试试题(500题)含答案.pdf VIP
- 消除艾滋病、梅毒和乙肝母婴传播项目工作制度及流程(模板).pdf
- 摩登家庭台词剧本第一季第一集中英双语左右对照.pdf VIP
- 专题02 人物传记阅读(解析版)-2025-2026学年八年级语文上册分类训练(统编版2024).docx
- 2024年河南省安阳市中考二模语文试题(原卷版+解析版).docx VIP
- 学堂在线 日语与日本文化 期末考试答案.docx VIP
- 应急避难场所项目可行性研究报告.docx VIP
- 智慧树 知到 形势与政策(成都工业学院)章节测试答案.docx VIP
文档评论(0)