首页 > 数据库 >【面试宝藏】Redis 常见面试题解析其二

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

时间:2024-06-05 22:57:59浏览次数:34  
标签:面试题 过期 Redis 集群 内存 宝藏 数据 节点

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,集群,内存,宝藏,数据,节点
From: https://blog.csdn.net/gygkhd/article/details/139484210

相关文章

  • 【Android面试题】请你分别采用递归和非递归对二叉树进行遍历?
    请你分别采用递归和非递归对二叉树进行遍历?这道题想考察什么?1、二叉树的基本原理和遍历的方法?考察的知识点二叉树遍历的基本概念、二叉树的基本原理考生如何回答二叉树的基本概念当然可以!二叉树是一种常见的数据结构,它由一组称为节点的元素构成。每个节点可以有零个......
  • Oracle数据库面试题-6
    1.请解释Oracle数据库中的SGA和PGA的区别。Oracle数据库中的SGA和PGAOracle数据库中的SGA(SystemGlobalArea)和PGA(ProgramGlobalArea)是数据库内存管理的两个核心区域,它们在数据库性能和资源分配方面扮演着不同的角色。SGA(SystemGlobalArea)全局内存区域:SGA......
  • Oracle数据库面试题-5
    81.请解释Oracle数据库中的自动空间重新压缩(AutomaticSpaceRecompression)的概念。Oracle数据库中的自动空间重新压缩(AutomaticSpaceRecompression)自动空间重新压缩是Oracle数据库中的另一个重要特性,它用于减少数据文件的大小,回收未使用的存储空间。这个过程通过压......
  • 程序分享--常见算法/编程面试题:整数转罗马数字
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;推荐专栏《10天学会使用asp.net编程AI大模型》,目前已完成所有内容,持续上传中。一顿烧烤不到的费用,让人能紧跟时代的浪潮。从普通网站,到公众号、小程序,再到AI大模型网站。干货满满......
  • 逆天面试题-
    扪心自问,不借助第三变量实现两个变量value的交换,你怎么做?321看两种思路:一.联想运算不多说,试着去感受它的奇妙#include<iostream>usingnamespacestd;intmain(){inta=3;intb=5;a=a+b;b=a-b;a=a-b;cout<<a<<""<<......
  • Redis-2-基本数据类型
    1.Redis基础命令命令描述示例KEYS查看符合模板的所有keyKEYSpatternDEL删除一个指定的keyDELkeyEXISTS判断key是否存在EXISTSkeyEXPIRE给一个key设置有效期,有效期到期时该key会被自动删除EXPIREkeysecondsTTL查看一个KEY的剩余有效期TTLke......
  • Redis-1-底层数据结构、为什么快
    参考文章:Redis常见面试题总结(上)redisIO多路复用模型详解JavaIO模型详解JavaNIO浅析深入理解Redis之简单动态字符串Redis中压缩列表的优缺点和更加高效的原因Redis中ziplist压缩列表的实现redis数据结构解析——跳跃表为什么读取连续内存没有比不连续的效率更高?1.R......
  • Redis-3-过期时间淘汰策略与内存淘汰策略
    目录1.Redis过期时间淘汰策略1.1惰性删除1.2定期删除1.3主动扫描2.Redis内存淘汰策略2.1最大内存配置2.2LRU最近最少使用2.2.1传统LRU2.2.2Redis中的LRU2.2.3LRU的缺点2.3访问频率最低2.3.1传统LFU2.3.2Redis的LFU2.3.2.1时间衰减函数2.3.2.2热度值函数2.3.2.3总结2......
  • Redis-5-高可用
    Redis高可用高可用性(HighAvailability,HA)主要是为了确保系统在面对故障、负载变化等情况下仍能持续提供服务。HA场景下,主要是解决这些问题。问题问题描述解决方案单点故障如果只有一个Redis实例,当它发生故障时,整个系统将无法访问缓存数据,导致服务中断。通过主从......
  • Redis-4-持久化
    Redis持久化1.1为什么Redis是基于内存的,不保存的话,应用停止了后数据就不在了。持久化的诉求,主要是解决以下问题:防止数据丢失Redis是一个内存数据库,数据主要存储在内存中。如果没有持久化机制,一旦服务器宕机或重启,内存中的所有数据都会丢失。通过持久化,Redis可以在磁盘上保......