当前位置: 首页 > news >正文

Redis高频面试题10个

1. Redis 的特点及与 Memcached 的区别 

  • 特点

    • 基于内存的键值数据库,支持持久化(RDB/AOF)。

    • 单线程模型,通过 IO 多路复用实现高并发。

    • 支持多种数据结构:字符串、哈希、列表、集合、有序集合等。

    • 提供事务、发布订阅、Lua 脚本等功能。

  • 与 Memcached 区别

    • 数据持久化:Redis 支持数据落盘,Memcached 纯内存。

    • 数据类型:Memcached 仅支持字符串,Redis 支持复杂数据结构。

    • 内存管理:Redis 采用虚拟内存机制,Memcached 使用预分配内存池。


2. Redis 的持久化机制(RDB vs AOF) 

  • RDB(快照)

    • 定时生成内存快照(dump.rdb),恢复速度快。

    • 缺点:可能丢失最后一次快照后的数据。

    • 触发方式:SAVE(阻塞)/ BGSAVE(后台异步)。

  • AOF(追加日志)

    • 记录所有写操作命令(appendonly.aof),数据安全性高。

    • 支持三种同步策略:always(每次写同步)、everysec(每秒同步,默认)、no(由系统决定)。

    • 缺点:文件体积大,恢复速度慢。

  • 混合持久化(Redis 4.0+):

    • 结合 RDB 和 AOF,重启时先加载 RDB 快照,再重放 AOF 增量命令。


3. Redis 的内存淘汰策略 

Redis 提供 6 种策略,通过 maxmemory-policy 配置:

  1. volatile-lru:从已设置过期的数据中淘汰最近最少使用的。

  2. volatile-ttl:淘汰即将过期的数据。

  3. volatile-random:随机淘汰已过期的数据。

  4. allkeys-lru:全局淘汰最近最少使用的数据(推荐)。

  5. allkeys-random:全局随机淘汰。

  6. noeviction:禁止淘汰,新写入操作报错。


4. Redis 事务与 CAS 乐观锁 

  • 事务流程

    • MULTI 开启事务 → 命令入队 → EXEC 执行或 DISCARD 取消。

    • 事务中的命令按顺序执行,但不保证原子性(单条命令失败不影响后续执行)。

  • CAS 实现

    • 使用 WATCH 监控键,若事务执行前键被修改,则事务回滚。

    • 示例:

      WATCH key
      val = GET key
      val = val + 1
      MULTI
      SET key val
      EXEC


5. Redis 单线程模型为何高效 

  • 核心原因

    • 纯内存操作,无磁盘 I/O 瓶颈。

    • 基于 Reactor 模式的非阻塞 IO 多路复用(epoll/kqueue)。

    • 单线程避免多线程上下文切换和竞争问题。

    • C 语言实现,底层优化充分。


6. 缓存穿透、击穿、雪崩的解决方案 

  • 穿透(查询不存在的数据):

    • 布隆过滤器拦截非法请求。

    • 缓存空值并设置短过期时间。

  • 击穿(热点 key 失效后高并发访问数据库):

    • 使用互斥锁(如 Redis 的 SETNX),保证单线程重建缓存。

  • 雪崩(大量 key 同时过期):

    • 分散过期时间(如基础时间 + 随机偏移)。

    • 永不过期策略 + 异步更新。


7. Redis 分布式锁的实现 

  • 核心命令

    SET lock_key unique_value NX EX 30  # 原子性加锁并设置超时
  • 注意事项

    • 锁需设置超时时间,防止死锁。

    • 释放锁时需验证值(避免误删其他线程的锁)。

    • 可结合 Redlock 算法实现多节点锁。


8. Redis 集群方案 

  1. 主从复制

    • 主节点(Master)写,从节点(Slave)读,支持数据同步。

    • 缺点:主节点单点故障。

  2. 哨兵模式(Sentinel)

    • 监控主从节点,自动故障转移。

  3. Cluster 模式

    • 数据分片(16384 个哈希槽),支持水平扩展。

    • 节点间通过 Gossip 协议通信,自动故障恢复。


9. Redis 的 Pipeline 与 Pub/Sub 

  • Pipeline

    • 将多个命令打包发送,减少网络往返时间(RTT),提升吞吐量。

    • 适用场景:批量操作(如批量写入数据)。

  • Pub/Sub

    • 发布订阅模式,支持消息广播。

    • 缺点:消息不持久化,消费者离线时消息丢失。


10. Redis 性能优化建议 

  • 内存优化

    • 使用 ziplistintset 等紧凑数据结构。

    • 避免存储大 Key(如单个 Value 超过 1MB)。

  • 持久化配置

    • 主节点关闭 RDB/AOF,从节点开启 AOF。

  • 集群部署

    • 分片避免数据倾斜,分散热点 Key。

相关文章:

  • 机器视觉运动控制一体机在天地盖同步跟随贴合解决方案
  • 系统架构设计师—数据库基础篇—数据库设计
  • C++编程:进阶阶段—4.1封装
  • Fork/Join 框架详解:分支合并的高性能并发编程
  • NoClassDefFoundError:UnsynchronizedByteArrayOutputStream
  • MySQL复合查询——通过案例讲解每个指令
  • MR的环形缓冲区(底层)
  • MyBatis-Plus开发流程:Spring Boot + MyBatis-Plus 实现对 book_tab 表的增删改查及Redis缓存
  • 在线量化工具总结与实战(mqbench) -- 学习记录
  • Vue 的 render 函数如何与 JSX 结合使用
  • 数据库防火墙 架构设计
  • 怎么做数据冷热分离?怎么做分库分表?为什么要用ES?
  • Seurat - Guided Clustering Tutorial官方文档学习及复现
  • 破解透明物体抓取难题,地瓜机器人CASIA 推出几何和语义融合的单目抓取方案|ICRA 2025
  • 图表解析技术:逆向提取图表数据,需要哪几步?
  • 基于Hadoop平台的电信客服数据的处理与分析
  • Ubuntu 合上屏幕 不待机 设置
  • 【Winform】WinForms中进行复杂UI开发时的优化
  • 【leetcode hot 100 48】旋转图像
  • C++ 单词识别_牛客题霸_牛客网
  • 韩正会见美国景顺集团董事会主席瓦格纳
  • “大型翻车现场”科技满满,黄骅打造现代化港口和沿海新城典范
  • 中国证券业协会修订发布《证券纠纷调解规则》
  • 欠债七十万后,一个乡镇驿站站长的中年心事
  • 牛市早报|4月新增社融1.16万亿,降准今日正式落地
  • 知名猎头公司创始人兼首席执行官庄华因突发疾病逝世,享年62岁