面试题2: redis

Redis(Remote Dictionary Server)是一个基于内存的高性能键值对数据库。读写速度极快(微秒级),QPS可达10万+。常用于缓存、分布式锁、会话管理、排行榜、计数器等场景

第1题:Redis 有哪些数据类型?分别用在什么场景?

答案:Redis有5种核心数据类型:

  • String:最基础,存字符串、数字。场景:缓存、计数器

  • Hash:存对象,如用户信息、购物车

  • List:有序列表。场景:消息队列、最新评论列表

  • Set:无序去重。场景:抽奖、共同好友

  • ZSet:有序带分数。场景:排行榜、延迟队列

💡 面试加分:结合项目说“我用String存验证码、用ZSet做排行榜、用Hash存用户信息”会更真实。

第2题:Redis 为什么这么快?

答案

  1. 数据在内存中,读写快

  2. 单线程执行命令,没有锁竞争和上下文切换开销

  3. I/O多路复用,一个线程处理大量连接

  4. 高效的数据结构,如哈希表查找O(1)

💡 注意:Redis 6.0后网络读写用了多线程,但命令执行还是单线程

第3题:RDB 和 AOF 有什么区别?

答案

 
 
  RDB AOF
原理 定时生成快照 记录每条写命令
优点 文件小、恢复快 数据安全,最多丢1秒
缺点 可能丢最后一次快照后的数据 文件大、恢复慢

如何选:允许少量丢数据追求速度用RDB,数据要求高用AOF,生产推荐两者结合

第4题:缓存穿透、击穿、雪崩是什么?怎么解决?

答案

  • 穿透:查不存在的数据 → 布隆过滤器 或 缓存空值

  • 击穿:热点key过期 → 互斥锁 或 逻辑过期

  • 雪崩:大量key同时过期 → 过期时间加随机值

💡 面试加分:简单说“我们项目里给缓存过期时间加了随机数,防止雪崩”。

第5题:Redis 怎么实现分布式锁?

答案:用 SETNX 命令,key不存在时才设置成功,同时设置过期时间防止死锁

java
// 伪代码
SET lock_key uuid NX PX 30000  // 原子操作:不存在才设置,30秒过期

生产环境推荐用 Redisson,它会自动续期(看门狗机制),不用自己操心锁过期问题

💡 面试加分:“我们项目用Redisson实现分布式锁,防止秒杀超卖。”

第6题:Redis 是单线程还是多线程?

答案

  • Redis 核心命令执行是单线程的

  • Redis 6.0 之后,网络I/O读写用了多线程,但命令执行还是单线程

  • 所以面试官问“Redis是单线程吗”,要分版本回答

💡 初级回答:可以说“Redis命令执行是单线程的,所以避免了锁竞争”。

第7题:Redis 的过期策略有哪些?

答案

  1. 惰性删除:访问key时才检查是否过期,过期就删

  2. 定期删除:定时扫描一批key,删除过期的

两者结合使用。如果过期key太多没来得及删,内存满了会触发内存淘汰策略,生产常用 allkeys-lru(淘汰最久未使用的)

第8题:你在项目中怎么用 Redis 的?

答案(结合自己的项目说,这里给模板):

  • 缓存:把热点数据(如商品信息、用户信息)存Redis,减少数据库压力

  • 分布式锁:秒杀、抢券场景防超卖,用Redisson实现

  • 计数器:文章阅读量、点赞数用 INCR 命令

  • 排行榜:用ZSet做积分榜、热搜榜

💡 面试加分:说出具体数据效果,比如“加了缓存后接口响应时间从500ms降到50ms”

 

posted @ 2026-06-23 16:22  雨花阁  阅读(18)  评论(0)    收藏  举报