面试redis常被问到的面试题含答案

Redis常见面试题及答案

1. Redis支持哪些数据结构?
  • 字符串:最大512MB,支持数值计算
  • 列表:双向链表结构,支持阻塞操作
  • 集合:无序唯一元素集合
  • 有序集合:带score排序的集合
  • 哈希:键值对存储结构
  • 位图:位操作数据结构
  • HyperLogLog:基数统计
  • Stream:消息队列功能
2. Redis持久化方式对比

RDB

  • 定时生成快照
  • 文件紧凑( 文件大小 = 内存数据量 × 压缩比 文件大小 = 内存数据量 \times 压缩比 文件大小=内存数据量×压缩比
  • 恢复速度快
  • 可能丢失最后一次保存后的数据

AOF

  • 记录写操作命令
  • 提供三种同步策略:
    • always:每次写入都同步
    • everysec:每秒同步(默认)
    • no:由操作系统决定
  • 文件较大但数据更安全

混合模式(4.0+)

  • RDB全量 + AOF增量
  • 兼顾恢复速度与数据安全
3. 缓存穿透解决方案
  • 现象:大量请求不存在的key
  • 应对方案
    1. 布隆过滤器预校验
    2. 空值缓存(设置短过期时间)
    3. 接口层增加校验规则
    4. 限流熔断机制

误判率计算: p ≈ ( 1 − e − k n / m ) k 误判率计算:p ≈ (1 - e^{-kn/m})^k 误判率计算:p(1ekn/m)k
其中 m m m为位数组大小, k k k为哈希函数数量, n n n为元素数量

4. 缓存雪崩预防
  • 现象:大量key同时过期
  • 解决方案
    • 随机过期时间(基础值 + 随机偏移)
    • 热点数据永不过期
    • 多级缓存架构
    • 集群部署保证高可用
5. Redis事务特性
  • 通过MULTI/EXEC实现
  • 不保证原子性(单条命令原子,整体不保证)
  • 没有回滚机制
  • 支持WATCH乐观锁
> WATCH balance
> MULTI
> DECRBY balance 50
> EXEC
6. 内存淘汰策略
  • volatile-lru:最近最少使用的过期键
  • allkeys-lru:全体键LRU淘汰
  • volatile-random:随机淘汰过期键
  • volatile-ttl:优先淘汰剩余时间短的键
  • noeviction:默认策略,不淘汰(报错)
7. Pipeline使用场景
  • 批量操作减少网络开销
  • 非原子性(命令逐条执行)
  • 适合批量写入/查询场景
  • 与事务的区别:不保证命令顺序执行

总耗时 = 1 次网络往返时间 + N 条命令执行时间 总耗时 = 1次网络往返时间 + N条命令执行时间 总耗时=1次网络往返时间+N条命令执行时间

8. Redis集群方案

主从复制

  • 异步复制
  • 读写分离架构
  • 数据延迟问题

哨兵模式

  • 监控主节点状态
  • 自动故障转移
  • 至少3个节点保证健壮性

Cluster模式

  • 数据分片(16384个槽)
  • 节点间Gossip协议通信
  • 支持动态扩缩容
9. 大Key处理方案
  • 拆分:将hash拆分为多个小hash
  • 压缩:使用Snappy压缩算法
  • 分页查询:使用HSCAN等命令
  • 删除优化:使用UNLINK异步删除
10. 热Key问题解决
  • 本地缓存:客户端缓存高频访问数据
  • 分片复制:将热key复制到多个节点
  • 限流降级:监控热key访问量
  • 读写分离:使用从节点处理读请求
11. Redis为什么快?
  • 内存存储
  • 单线程避免上下文切换
  • IO多路复用
  • 高效数据结构设计
  • 编译优化(ANSI C编写)
12. 分布式锁实现要点
  • 互斥性SETNX命令
  • 超时机制EXPIRE
  • 续期处理:看门狗线程
  • 原子操作:使用SET key value NX EX
  • 释放验证:Lua脚本保证原子性
if redis.call("get",KEYS[1]) == ARGV[1] then
    return redis.call("del",KEYS[1])
else
    return 0
end
13. 慢查询优化
  • 设置阈值:config set slowlog-log-slower-than 10000
  • 保留条数:config set slowlog-max-len 1000
  • 避免KEYS*命令
  • 使用SCAN代替全量遍历
  • 监控热点命令
14. 缓存与数据库一致性
  • 先更新库再删缓存
  • 设置缓存过期时间兜底
  • 使用canal监听binlog
  • 延迟双删策略
  • 最终一致性方案
15. Redis多线程机制(6.0+)
  • IO线程处理网络请求
  • 执行命令仍为单线程
  • 配置项:io-threads 4
  • 适用场景:高并发网络请求
  • 不改变线程安全特性

附:性能指标参考值

  • 单节点QPS:10万+/秒
  • 网络延迟:1ms(同机房)
  • 持久化开销:
    • RDB:fork耗时与内存量正相关
    • AOF:每秒写入性能损失约2%
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酷爱码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值