版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Redis高频面试题总结(实战版)一、Redis基础认知(入门必问)1.说说Redis是什么?优缺点有哪些?Redis是一款开源的、基于内存的高性能键值对数据库,也常被称作数据结构服务器,支持字符串、哈希、列表、集合等多种数据结构。日常开发中主要用作缓存、分布式锁、限流、消息队列等场景。优点:性能极高:纯内存操作,单机QPS可达十万级,响应速度毫秒级数据类型丰富:相比普通KV缓存,支持多种复杂数据结构,适配更多业务场景支持持久化:内存数据可落地磁盘,重启后数据不丢失功能完善:支持过期删除、事务、发布订阅、分布式锁、限流等特性集群方案成熟:支持主从、哨兵、集群模式,可实现高可用、水平扩容缺点:内存受限:所有数据基于内存,服务器内存大小决定数据存储量,成本比磁盘数据库高数据一致性较弱:异步持久化、主从复制存在短暂数据延迟,无法保证强一致性不适合海量冷数据存储:仅适合高频热点数据,海量低频数据存储成本过高2.Redis为什么这么快?核心原因可以从底层架构和运行机制几点说明:纯内存操作:所有读写操作都在内存中完成,避免磁盘IO耗时,效率远高于磁盘数据库单线程模型:核心读写命令单线程执行,避免多线程竞争、锁冲突、上下文切换的开销IO多路复用:采用epoll多路复用机制,单线程可监听大量客户端连接,高效处理网络请求数据结构高效:底层封装的压缩列表、跳表、哈希表等结构,读写时间复杂度极低协议简单:Redis自定义RESP协议,文本格式简单,解析开销小补充:Redis并不是完全单线程,持久化、异步删除、集群心跳等操作由独立子线程完成,不影响核心读写性能。3.Redis单线程为什么不会CPU瓶颈?Redis核心瓶颈从来不是CPU,而是内存和网络IO。单线程规避了线程竞争和锁消耗,且绝大多数命令都是简单的内存读写,运算量极小。只有在批量超大key操作、大量模糊删除、全量遍历等极端场景下,才会出现CPU占用过高问题。二、Redis数据结构(高频重点)1.Redis常用数据类型及适用场景String字符串:最基础类型,支持字符串、数字、二进制数据。适用场景:缓存用户信息、配置信息、计数器、分布式ID、限流计数Hash哈希:键值对集合,类似Map。适用场景:存储结构化数据,如用户详情、商品信息,相比String序列化存储,可单独修改单个字段,更灵活省内存List列表:有序可重复,底层双向链表。适用场景:消息队列、任务队列、时间线、点赞列表Set集合:无序不可重复。适用场景:去重、交集并集差集计算,如好友共同关注、用户点赞去重ZSet有序集合:有序不可重复,带score权重排序。适用场景:排行榜、延时队列、权重排序列表2.说说底层数据结构(面试加分项)String:底层是简单动态字符串SDS,解决了C字符串缓冲区溢出、长度获取慢的问题List:新版本统一由quicklist实现,结合压缩列表和双向链表的优势,兼顾内存和性能Hash:数据量小时用ziplist压缩列表,数据量大时转为hashtable哈希表ZSet:数据量小时用ziplist,量大时用跳表+哈希表,跳表保证有序查询效率3.什么是BigKey?危害及解决方案BigKey定义:通常指value过大的key,比如String长度超过10KB、Hash/List/Set元素数量过万。危害:读写耗时变长,单线程阻塞,导致后续命令卡顿超时网络传输量大,占用带宽,引发接口响应超时持久化、主从复制耗时激增,造成集群同步延迟内存分配不均,集群分片内存失衡解决方案:拆分key:将大key拆分为多个小key,分散读写压力精简数据:剔除无效冗余数据,缩短存储内容避免全量操作:禁止使用keys、hgetall、lrange0-1等全量遍历命令分批操作:使用hscan、sscan、zscan迭代遍历,批量读写三、Redis过期与删除机制1.Rediskey过期删除策略Redis采用惰性删除+定期删除结合的策略,没有采用实时删除。惰性删除:key过期后不会立刻删除,下次访问该key时,才检测过期并删除。优点是节省CPU资源,缺点是长期不访问的过期key会一直占用内存定期删除:后台线程定时随机抽取部分过期key检测删除,循环遍历所有数据库。目的是弥补惰性删除的缺陷,释放过期key占用的内存,平衡CPU和内存开销2.Redis内存淘汰机制(必考)当Redis内存达到maxmemory上限时,会触发内存淘汰,共有8种策略,常用6种:noeviction:默认策略,内存满了直接报错,不淘汰任何数据allkeys-lru:所有key中,淘汰最近最少使用的keyvolatile-lru:仅在带过期时间的key中,淘汰最近最少使用的keyallkeys-lfu:所有key中,淘汰使用频率最低的keyvolatile-lfu:仅过期key中,淘汰使用频率最低的keyallkeys-random/volatile-random:随机淘汰key生产推荐:普通缓存业务用allkeys-lru,带过期限时业务用volatile-lru。四、Redis持久化机制1.RDB和AOF区别、优缺点及选型Redis提供两种持久化方式,可单独使用也可同时开启。RDB(快照持久化)定期将内存全量数据快照写入磁盘,生成二进制rdb文件。优点:文件体积小、恢复速度快、对主线程影响小,适合冷备份缺点:会丢失两次快照之间的增量数据,数据安全性一般;大数据量fork子线程时会短暂卡顿AOF(日志持久化)记录每一条写命令日志,追加到aof文件中,重启时重放日志恢复数据。优点:数据安全性高,支持秒级数据恢复,丢失数据极少缺点:日志文件体积大,恢复速度慢,长期运行文件会持续膨胀,需要定期重写生产选型核心业务:同时开启RDB+AOF,AOF保证数据安全,RDB用于快速备份恢复纯缓存业务:无需持久化,关闭持久化提升性能允许少量数据丢失:仅开启RDB即可2.AOF重写机制是什么?AOF会持续记录写命令,长期运行后文件会越来越大。AOF重写会根据当前内存数据,生成精简的新日志文件,删除冗余无效命令(比如多次修改同一个key,只保留最终结果),压缩文件体积,不影响主线程正常读写。五、缓存三大问题(面试核心)1.缓存穿透、击穿、雪崩区别及解决方案(1)缓存穿透问题:查询数据库和缓存都不存在的数据,比如恶意传大量无效ID,请求直接打穿到数据库,压垮数据库。解决方案:空值缓存:查询为空时,缓存空key,设置短过期时间布隆过滤器:提前过滤不存在的key,拦截无效请求接口校验、限流封禁:拦截恶意非法请求(2)缓存击穿问题:热点key过期瞬间,大量并发请求同时打到数据库,瞬间压垮DB。解决方案:互斥锁:过期后只允许一个请求查库更新缓存,其他请求等待重试热点key永不过期:核心热点数据取消过期时间过期时间随机偏移:避免大量key同时过期(3)缓存雪崩问题:大量缓存key同时过期、或Redis集群宕机,导致所有请求全部访问数据库,引发数据库雪崩。解决方案:过期时间加随机值,规避批量过期搭建Redis高可用集群(主从+哨兵/集群),避免单点宕机服务层添加熔断、降级、限流机制多级缓存:本地缓存+Redis分布式缓存双层防护2.缓存和数据库一致性问题怎么解决?不存在绝对的强一致,业务中根据一致性要求选择方案:低一致场景(大部分业务):更新数据库+删除缓存,依赖过期时间兜底,简单高效高一致场景:延时双删(更新DB删缓存,延迟几秒再删一次),减少短暂不一致时间强一致场景:采用分布式锁,更新和查询串行执行;或基于Canal监听binlog,异步更新缓存核心原则:不要过度追求强一致,牺牲性能换取极小概率的一致,性价比极低。六、Redis高可用(主从、哨兵、集群)1.主从复制原理Redis支持一主多从,主节点负责读写,从节点同步主节点数据,只做读服务,分担读压力。复制流程:从节点发起同步请求,主节点执行bgsave生成RDB快照主节点将RDB文件发送给从节点,从节点加载恢复数据同步期间主节点新的写命令,存入复制缓冲区,同步完成后增量同步后续持续增量同步,保证主从数据一致缺陷:主节点宕机后,无法自动切换,需要人工干预,不具备高可用。2.哨兵模式作用及原理哨兵是专门监控主从集群的独立进程,解决主从模式无法自动故障转移的问题。核心功能:监控、自动故障转移、通知客户端工作机制:多个哨兵互相监控,主观下线、客观下线确认主节点故障,自动选举新主节点,修改主从关系,客户端自动切换新主节点地址。缺陷:哨兵模式只有一个主节点,写能力无法扩容,仅能扩容读能力。3.Redis集群原理(分片集群)RedisCluster集群解决单机写瓶颈,实现数据分片和水平扩容,默认16384个哈希槽,所有key通过CRC16算法计算哈希值,分配到对应槽位的节点。核心特点:支持水平扩容,新增节点自动迁移哈希槽每个主节点搭配从节点,保证高可用,单主故障自动切换客户端可直接连接集群,无需中间代理缺陷:不支持跨槽事务、多key批量操作受限,设计业务key需要合理分区。七、Redis分布式锁(重中之重)1.手写Redis分布式锁原理核心命令:SETkeyuuidNXEX过期时间加锁:利用NX互斥特性,只有key不存在时才能创建成功,同时设置过期时间防止死锁,value存入唯一UUID解锁:先查询key的value,判断是否为自己加的锁,确认无误后通过Lua脚本删除,保证查询+删除原子性2.为什么要用UUID+Lua脚本解锁?UUID:防止误删别人的锁,避免业务超时导致锁过期,其他线程加锁后被当前线程误删除Lua脚本:保证解锁的判断和删除操作原子执行,杜绝并发问题3.分布式锁存在的问题及优化锁超时释放问题:业务执行超时,锁提前过期,导致并发问题。解决方案:开启锁续期(看门狗机制)主从延迟锁失效:主节点加锁成功,未同步到从节点就宕机,从节点升级为主节点后锁失效。解决方案:Redlock红锁机制(多节点加锁)4.Redisson核心优势Redisson是成熟的Redis分布式锁框架,封装了所有底层细节,支持可重入锁、公平锁、读写锁、锁续期、红锁,解决了原生手写锁的所有缺陷,生产环境优先使用Redisson。八、Redis实战问题与优化1.Redis常见性能卡顿原因存在大ke
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乐园门店商品代销合同书模板二篇
- 通信设备企业售后服务部客户满意度绩效考核表
- 确认产品设计变更的商洽函8篇范文
- 年度总结报告催办函5篇
- 关于产品规格调整的函(4篇)范文
- 物流主管运输效率绩效评定表
- 定制化光伏逆变器模块技术规格书修订确认函(6篇)范文
- 高等教育教育质量评估标准流程指南
- 测试工程师测试效果考核表
- 汽车销售行业销售经理绩效考核表更新
- 河南省开封市2026届高三下学期第二次质量检测数学试题(解析版)
- 2026年消防月活动主题宣贯课件
- 涂装废气RCO治理设备运维管理手册
- GB/T 18247.3-2026主要花卉产品等级第3部分:盆栽观叶植物
- 中国水稻研究所陵水试验基地建设项目水土保持报告表
- 亚细胞定位研究方法
- 新22J01 工程做法图集
- 旧桥拆除安全培训课件
- 美术课件《动漫人物中手的画法》
- DLT 1051-2019电力技术监督导则
- JJF 1664-2017温度显示仪校准规范
评论
0/150
提交评论