【面试宝藏】Redis 常见面试题解析其二

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis 高级面试题涵盖了哈希槽机制、集群的主从复制、数据丢失可能性、复制机制、最大节点数、数据库选择、连通性测试、事务操作、过期时间和内存优化等。Redis 使用哈希槽实现数据分布,主从复制保障高可用,异步复制可能导致写操作丢失。集群最大支持1000个节点,仅允许单数据库。可通过 `ping` 命令测试连接,使用 `EXPIRE` 设置过期时间,`MULTI/EXEC` 等进行事务处理。内存优化包括合理数据类型、设置过期时间及淘汰策略。Redis 可用作缓存、会话存储、排行榜等场景,使用 `SCAN` 查找特定前缀键,列表实现异步队列,分布式锁则通过 `SET` 命令和 Lua 脚本实现。

Redis 高级面试题解析

20. 说说 Redis 哈希槽的机制?

Redis 集群采用哈希槽(Hash Slot)机制来分布和管理数据。整个哈希空间被划分为 16384 个槽,每个键通过 CRC16 校验后取模映射到一个哈希槽。每个节点负责一部分哈希槽,从而实现数据分片和负载均衡。

21. Redis 集群的主从复制模型是怎样的?

Redis 集群中的每个主节点(Master)可以有多个从节点(Slave)。主节点负责写操作,从节点负责读操作和数据备份。当主节点失效时,从节点可以通过投票机制提升为主节点,保证高可用性。

22. Redis 集群会有写操作丢失吗?为什么?

Redis 集群在网络分区或多数主节点失效时可能会丢失写操作。因为 Redis 集群采用异步复制,写操作在传播到从节点前,主节点可能会失效,导致数据丢失。

23. Redis 集群之间是如何复制的?

Redis 集群中的主从节点间采用异步复制机制。主节点在处理写操作后,将变更通知从节点,从节点异步地接收和应用这些变更。

24. Redis 集群最大节点个数是多少?

Redis 集群最大支持 1000 个节点。

25. Redis 集群如何选择数据库?

Redis 集群仅支持单个数据库,即数据库索引为 0。因此,所有数据都存储在同一个数据库中,无法像单节点 Redis 那样选择不同的数据库。

26. 怎么测试 Redis 的连通性?

可以使用 ping 命令测试 Redis 服务器的连通性:

redis-cli ping

如果连接正常,服务器会返回 PONG

27. 怎么理解 Redis 事务?

Redis 事务是一组原子操作的集合。事务通过 MULTIEXECDISCARDWATCH 等命令实现。事务内的所有命令按顺序执行,不会被其他命令插入。

28. Redis 事务相关的命令有哪些?

  • MULTI:开始一个事务。
  • EXEC:执行事务中的所有命令。
  • DISCARD:放弃事务中的所有命令。
  • WATCH:监视一个或多个键,若在事务执行前这些键被修改,事务将被取消。

29. Redis Key 的过期时间和永久有效分别怎么设置?

  • 设置过期时间:使用 EXPIRE 命令,如设置 10 秒后过期:
    EXPIRE key 10
    
  • 设置永久有效:使用 PERSIST 命令取消键的过期时间:
    PERSIST key
    

30. Redis 如何做内存优化?

  • 合理使用数据类型:选择适合的数据结构存储数据。
  • 压缩数据:使用合适的编码方式减少内存占用。
  • 淘汰策略:配置合适的内存淘汰策略,如 LRU(最近最少使用)。
  • 过期策略:合理设置键的过期时间,及时清理无用数据。

31. Redis 回收进程如何工作的?

Redis 回收进程通过定期和惰性删除机制清理过期键。当内存使用达到阈值时,Redis 根据配置的淘汰策略删除部分键,以腾出空间。

32. 有哪些办法可以降低 Redis 的内存使用情况呢?

  • 使用合适的数据结构:例如使用哈希表存储小对象。
  • 压缩和编码:利用 Redis 内置的对象编码(如 ZIPLIST、INTSET)优化存储。
  • 设置过期时间:及时清理过期数据。
  • 数据拆分:将大对象拆分成小对象存储。

33. Redis 的内存用完了会发生什么?

当 Redis 内存用完时,会根据配置的淘汰策略删除部分键。如果没有配置淘汰策略,写操作将返回错误(OOM),无法插入新数据。

34. 一个 Redis 实例最多能存放多少的 KEYS?

Redis 理论上能存储的数据量取决于可用内存和操作系统的限制。实际中,内存是主要限制因素。64 位系统下,Redis 可以支持数十亿个键。

35. MySQL 里有 2000w 数据。Redis 中只存 20w 的数据,如何保证 Redis 中的数据都是热点数据?Redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。

可以通过以下方法保证 Redis 中存储热点数据:

  • 设置合理的过期时间:确保长时间不访问的数据自动过期。
  • 使用 LRU 淘汰策略:淘汰最近最少使用的数据,保持热点数据在内存中。

36. Redis 最适合的场景?

  • 缓存:提高数据访问速度,减轻数据库负载。
  • 会话存储:存储用户会话数据。
  • 排行榜/计数器:实现快速排序和计数功能。
  • 消息队列:实现发布/订阅和延迟队列等功能。
  • 实时分析:处理实时数据分析和统计。

37. 假如 Redis 里面有 1亿个 Key,其中有 10w 个 Key 是以某个固定的已知的前缀开头的,如果将它们全部找出来?

可以使用 SCAN 命令配合模式匹配找出指定前缀的键:

SCAN 0 MATCH prefix* COUNT 1000

注意,SCAN 命令是增量式遍历,不会阻塞 Redis。

38. 如果有大量的 Key 需要设置同一时间过期。一般需要注意什么?

  • 避免过期时间扎堆:大批量键同时过期会造成 Redis 瞬时压力增大。
  • 分批设置过期时间:将过期时间分散开,减少压力。

39. 使用过 Redis 做异步队列么,你是怎么用的?

可以使用 Redis 的列表(List)结构实现异步队列:

  • 生产者使用 LPUSH 将任务加入队列。
  • 消费者使用 BRPOP 从队列中取出任务。

40. 使用过 Redis 分布式锁么,它是什么回事?

Redis 分布式锁用于在分布式环境下控制资源访问。实现方法:

  • 使用 SET key value NX PX 设置锁,NX 确保键不存在时设置,PX 设置过期时间。
  • 释放锁时,确保释放的是自己加的锁,可以使用 Lua 脚本保证原子性。
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2天前
|
XML JSON Java
Android面试题 之 网络通信基础面试题
序列化对比:Serializable码流大、性能低;XML人机可读但复杂;JSON轻量、兼容性好但空间消耗大;ProtoBuff高效紧凑。支持大量长连接涉及系统限制调整、缓冲区优化。select/poll/epoll是IO多路复用,epoll在高连接数下性能更优且支持边缘触发。水平触发持续通知数据,边缘触发仅通知新数据。直接内存减少一次拷贝,零拷贝技术如sendfile和MMAP提升效率。关注公众号"AntDream"了解更多技术细节。
7 1
|
5天前
|
安全 Java 数据安全/隐私保护
Java基础4-一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!(二)
Java基础4-一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!(二)
15 0
|
5天前
|
JSON 安全 Java
Java基础4-一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!(一)
Java基础4-一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!(一)
14 0
|
6天前
|
存储 异构计算 内存技术
【硬件工程师面试宝典】常见面试题其一
- Setup时间:时钟前数据需稳定的最小时间。 - Hold时间:时钟后数据需保持稳定的时间。 - 竞争现象:不同路径信号汇合导致输出不稳定。 - 冒险现象:竞争引起的短暂错误状态。 - D触发器实现2倍分频电路。
20 5
|
6天前
【硬件工程师面试宝典】常见面试题其二
检查单片机上电不运行:电源电压、时钟信号、复位电路、程序烧录。三极管特性:输出特性曲线和转移特性曲线。频率响应指系统对不同频率信号的响应,稳定要求幅度和相位不变。改变响应曲线方法:调整反馈、使用滤波器、改变元件参数。差分运放相位补偿通过在反馈回路加电容,波特图显示补偿效果。基本放大电路类型有共射、共集、共基,差分结构用于抗干扰和提高共模抑制比。电阻电容串联,电容电压为低通滤波,电阻电压为高通滤波。选择电阻考虑阻值、功率、温度系数、精度和尺寸。CMOS电路传递低电平用N管。电流偏置电路通过R1、Q1产生稳定电流。施密特电路回差电压由R1、R2决定。LC振荡器的哈特莱、科尔皮兹、克拉
13 0
|
1天前
|
缓存 网络协议 Java
Android面试题之Java网络通信基础知识
Socket是应用与TCP/IP通信的接口,封装了底层细节。网络通信涉及连接、读写数据。BIO是同步阻塞,NIO支持多路复用(如Selector),AIO在某些平台提供异步非阻塞服务。BIO示例中,服务端用固定线程池处理客户端请求,客户端发起连接并读写数据。NIO的关键是Selector监控多个通道的事件,减少线程消耗。书中推荐《Java网络编程》和《UNIX网络编程》。关注公众号AntDream了解更多。
11 2
|
1天前
|
存储 缓存 Java
面试官:Java中缓冲流真的性能很好吗?我看未必
【6月更文挑战第9天】面试官:Java中缓冲流真的性能很好吗?我看未必
21 3
|
13天前
|
存储 算法 Java
JAVA后端开发面试题库
JAVA后端开发面试题库
20 1
|
17天前
|
缓存 安全 Java
【Java面试——并发基础、并发关键字】
随着硬件指令集的发展,我们可以使用基于冲突检测的乐观并发策略: 先进行操作,如果没有其它线程争用共享数据,那操作就成功了,否则采取补偿措施(不断地重试,直到成功为止)。这种乐观的并发策略的许多实现都不需要将线程阻塞,因此这种同步操作称为非阻塞同步。 乐观锁需要操作和冲突检测这两个步骤具备原子性,这里就不能再使用互斥同步来保证了,只能靠硬件来完成。硬件支持的原子性操作最典型的是: 比较并交换(Compare-and-Swap,CAS)。CAS 指令需要有 3 个操作数,分别是内存地址 V、旧的预期值 A 和新值 B。当执行操作时,只有当 V 的值等于 A,才将 V 的值更新为 B。
|
25天前
|
SQL 存储 Java
致远互联java实习生面试
致远互联java实习生面试
34 0

热门文章

最新文章

推荐镜像

更多