Redis高频面试题及详细答案(真实面试版)_第1页
Redis高频面试题及详细答案(真实面试版)_第2页
Redis高频面试题及详细答案(真实面试版)_第3页
Redis高频面试题及详细答案(真实面试版)_第4页
Redis高频面试题及详细答案(真实面试版)_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Redis高频面试题及详细答案(真实面试版)一、Redis基础认知(初级必问)1、简单说下Redis是什么?主要特点有哪些?Redis是一款开源的、基于内存的键值对非关系型数据库,也常被称作缓存中间件。和传统数据库相比,它读写速度极快,主要用于热点数据缓存、分布式场景数据存储。核心特点:内存存储为主:绝大部分数据操作在内存完成,读写性能极高,每秒可支撑十万级QPS。支持持久化:可将内存数据落地到磁盘,重启后数据不丢失。数据类型丰富:不止普通字符串,支持List、Set、Hash、ZSet、Stream等多种数据结构。单线程模型:核心命令处理为单线程,避免多线程竞争锁问题,性能稳定。高可用、可集群:支持主从复制、哨兵模式、集群分片,适配生产高可用场景。支持多种高级特性:事务、Lua脚本、发布订阅、过期淘汰、限流等。2、Redis为什么速度这么快?很多人误以为单纯是因为内存操作,实际是多重优势叠加的结果:纯内存操作:数据存储在内存,避免磁盘IO的耗时,读写延迟极低。单线程无锁竞争:核心命令串行执行,不需要加锁、解锁,规避了多线程上下文切换、锁等待的开销。IO多路复用模型:采用epoll多路复用机制,单线程可以监听大量客户端连接,高效处理海量请求。数据结构高效:底层封装的哈希表、跳表等结构,查询、增删时间复杂度极低。简单的命令执行逻辑:Redis命令设计精简,执行流程短,没有复杂的语法解析和事务日志开销。补充:Redis的单线程仅指命令执行核心线程,持久化、集群心跳、文件读写等操作会用到子线程,不会阻塞主流程。3、Redis支持哪些常用数据类型?各自适用场景?日常开发最常用5种基础类型,外加几种特殊高级类型,核心场景如下:String(字符串):最基础类型,可存字符串、数字、二进制数据。适用场景:缓存用户信息、配置信息、计数器、限流计数、分布式锁。Hash(哈希):键值对集合,类似Java的Map。适用场景:存储结构化数据,比如用户详情、商品信息,比单独创建多个String更节省内存。List(列表):有序可重复链表,两头可进出。适用场景:消息队列、任务队列、用户点赞记录、时间线列表。Set(集合):无序不可重复。适用场景:去重、交集并集差集计算,比如共同好友、签到用户、权限去重。ZSet(有序集合):不重复且自带权重排序。适用场景:排行榜、积分排名、延时任务、有序去重列表。Stream(流):消息队列专用类型,支持消息持久化、消费者组、消息确认。适用场景:可靠消息队列、日志采集、异步任务处理。4、Redis单线程为什么不会瓶颈?能支撑多少并发?首先,Redis的瓶颈从来不是线程,而是网络IO和内存。单线程优势:避免了多线程锁竞争、上下文切换、死锁等问题,执行效率极其稳定。配合IO多路复用,单线程可以同时处理上万客户端连接。性能参考:单机Redis正常可支撑10W+QPS,足够满足绝大多数中小业务场景,高并发场景可通过集群分片扩容。什么时候会瓶颈:单条命令执行耗时过长(比如keys全量遍历、超大集合遍历),会阻塞主线程,这也是生产禁止使用高危命令的原因。二、Redis持久化(高频核心)5、Redis的两种持久化方式?区别是什么?生产怎么选择?Redis提供RDB和AOF两种持久化机制,可单独使用也可同时开启。1)RDB(快照持久化)原理:按照配置的时间周期,定期将内存中全量数据生成快照,保存到磁盘的RDB文件中。持久化时会fork子线程执行,不阻塞主线程。优点:文件体积小、恢复速度快、占用CPU低,适合冷备份。缺点:会存在数据丢失风险,两次快照之间的增量数据如果宕机,会全部丢失;大数据量fork子进程会短暂占用内存。2)AOF(日志持久化)原理:以日志形式记录每一条写命令,客户端每执行一条修改数据的命令,就追加到AOF日志文件中,重启时重放日志恢复数据。优点:数据安全性极高,支持秒级甚至几乎零丢失,宕机最多丢失最后一秒数据。缺点:文件体积大,恢复速度比RDB慢,长期运行日志会持续膨胀,需要定期重写压缩。生产选择方案纯缓存场景、允许少量数据丢失:只开RDB即可。核心业务、不允许大量数据丢失:RDB+AOF同时开启(生产主流方案),兼顾备份和数据安全。极致数据安全:只开AOF。6、AOF的三种刷盘策略?各自优缺点?always:每写一条命令立刻刷盘。优点:数据绝对安全,几乎不丢失;缺点:IO频繁,性能最差,生产基本不用。everysec(默认):每秒批量刷盘一次。优点:性能均衡,宕机最多丢失1秒数据;缺点:极端情况下存在少量数据丢失。no:交给操作系统自动刷盘。优点:性能最高;缺点:丢失数据最多,不可控,生产禁止使用。7、AOF重写机制是什么?为什么需要重写?AOF会持续记录所有写命令,长期运行会产生大量冗余命令,比如同一个key多次修改、删除,日志文件会越来越大。AOF重写就是Redis后台自动触发的机制:遍历当前内存数据,直接生成最终数据的最简写入命令,替换旧的冗余AOF日志,不记录中间无效操作。作用:大幅压缩AOF文件体积,加快数据恢复速度,减少磁盘占用。重写过程由子线程执行,不阻塞主线程。三、缓存三大经典问题(面试必考)8、缓存穿透、缓存击穿、缓存雪崩的区别?解决方案?1)缓存穿透现象:请求查询数据库和缓存都不存在的数据,比如恶意伪造无效ID,缓存一直不命中,所有请求直接打在数据库上,压垮数据库。解决方案:空值缓存:查询为空时,缓存空数据,设置短期过期时间;布隆过滤器:提前过滤不存在的key,拦截无效请求;接口校验、限流、黑名单拦截恶意请求。2)缓存击穿现象:热点key过期瞬间,大量并发请求同时未命中缓存,瞬间全部请求击穿到数据库。比如秒杀热点商品key过期。解决方案:热点key永不过期;互斥锁(分布式锁):同一时间只放行一个请求查库更新缓存;缓存预热、异步续期。3)缓存雪崩现象:大量缓存key同时过期,或者Redis集群宕机,导致大量请求同时访问数据库,数据库压力骤增崩溃。解决方案:过期时间加随机值,避免批量过期;搭建Redis高可用集群(主从+哨兵/集群),避免单点宕机;服务层限流、降级、熔断;多级缓存架构(本地缓存+分布式缓存)。9、缓存和数据库双写一致性问题怎么解决?生产没有绝对的强一致,只有适配业务的最优方案,主流方案如下:更新数据库+删除缓存(推荐):先改库,再删缓存。优点:性能好、冲突少;缺点:极端毫秒级并发存在短暂不一致,适合绝大多数业务。延时双删:先删缓存、改库、延迟几百毫秒再删一次缓存,解决读写并发不一致问题,适配一致性要求稍高的业务。更新数据库+更新缓存:频繁更新场景会产生大量无效缓存更新,浪费性能,不推荐。canal订阅binlog异步更新缓存:监听数据库日志,异步更新缓存,最终一致性,适合高并发、高一致场景。补充:强一致性业务不建议用缓存,直接查库。四、Redis过期与淘汰机制10、Rediskey过期删除策略是什么?采用「惰性删除+定期删除」结合的策略,不会实时删除过期key:惰性删除:客户端访问key时,才判断是否过期,过期则直接删除。节省CPU,但会堆积大量无人访问的过期key,占用内存。定期删除:Redis后台定时随机抽取部分key检查过期并删除,平衡内存和CPU开销,解决惰性删除的内存堆积问题。11、Redis内存淘汰策略有哪些?生产常用哪种?当Redis内存达到最大限制时,会触发淘汰策略,共8种,分为三类:针对所有key淘汰allkeys-lru:淘汰最近最少使用的key(生产最常用)allkeys-lfu:淘汰最少访问次数的keyallkeys-random:随机淘汰key只针对带过期时间的key淘汰volatile-lru、volatile-lfu、volatile-random、volatile-ttl(优先淘汰即将过期)禁止淘汰:no-eviction,内存满了直接报错,不删除任何数据生产首选:allkeys-lru,贴合缓存热点数据特性,优先保留高频访问数据。五、Redis高可用(主从、哨兵、集群)12、Redis主从复制原理?主从复制是Redis高可用的基础,一台主节点负责读写,多台从节点同步主节点数据,实现读写分离、数据备份。复制分为三个阶段:建立连接阶段:从节点向主节点发起握手,确认同步权限。全量复制阶段:主节点fork子进程生成RDB快照,发送给从节点,同时缓存期间的写命令,快照传输完成后补发缓存命令。增量复制阶段:全量同步完成后,主节点后续的写命令实时同步给从节点,维持数据一致。缺点:主节点故障后,无法自动切换,需要人工干预,不满足高可用。13、哨兵模式的作用?工作原理?哨兵是专门监控主从集群的组件,实现自动故障发现+自动主从切换,解决主从模式无法自动容灾的问题。核心作用:监控节点状态、故障自动转移、客户端服务发现。工作流程:哨兵定期心跳检测主、从节点状态;主观下线:单个哨兵判定主节点故障;客观下线:多个哨兵协商确认主节点真故障;自动选举最优从节点升级为主节点;修改其他从节点的主节点,完成集群切换。适用场景:中小业务,数据量不大,不需要分片扩容,只需要高可用。14、Redis集群原理(分片集群)?为什么需要集群?哨兵模式只能解决高可用,无法解决单节点内存上限、并发上限问题,Redis集群通过分片实现横向扩容。核心原理:集群共有16384个哈希槽,所有key通过CRC16算法计算哈希值,分配到对应槽位;多个主节点分摊16384个槽位,每个主节点负责一部分槽位的数据;每个主节点搭配从节点,保证单节点故障不影响整体集群;客户端请求key时,定位槽位对应的节点,完成读写。优势:支持横向扩容、突破单节点内存和并发限制、分布式高可用。缺点:不支持跨槽位多键事务、批量操作有限制、运维复杂度更高。六、Redis经典面试难题15、Redis分布式锁实现原理?存在什么问题?怎么优化?基础实现原理:利用SET命令加过期时间,原子抢占锁。命令:SETkeyuuidNXEX过期时间。NX:key不存在才创建(保证互斥);EX:自动过期(防止死锁);uuid:唯一标识,防止误删别人的锁。基础版本存在的问题:锁过期时间不好把控,业务没执行完锁就失效,导致并发安全问题;主从同步延迟,主节点锁成功、未同步到从节点就宕机,集群锁失效。生产优化方案:增加锁续期机制(看门狗),业务未完成自动延长锁时间;使用Redisson框架封装的分布式锁,解决续期、误删、可重入问题;极致可靠场景使用Redlock红锁机制。16、Redis为什么不适合存储大量冷数据?Redis基于内存存储,内存成本远高于磁盘,存储冷数据极度浪费资源;冷数据长期不访问,会占用内存,导致热点数据被淘汰,影响业务性能;大量数据持久化会增加磁盘IO、fork子进程开销,降低Redis性能。冷数据建议存入MySQL、ES等磁盘数据库。17、生产环境Redis禁止使用哪些命令?为什么?keys*:全量遍历所有key,时间复杂度O(n),会阻塞主线程,导致服务卡顿;flu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论