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

【面试宝藏】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 脚本保证原子性。

相关文章:

  • CAD2022下载与安装
  • 医学领域科技查新点提炼方法!---附案例分析
  • 合并两个排序链表
  • 【Python】已完美解决:(Python键盘中断报错问题) KeyboardInterrupt
  • uniapp自定义的下面导航
  • 基于Python的AI动物识别技术研究
  • 酷开科技丨酷开系统重塑家庭娱乐生态,开启家庭生活新体验
  • RAG系统进阶(五)文本分割优化技巧及代码
  • Spring学习笔记
  • Linux基础IO【II】
  • RuoyiAdmin项目搭建及Docker 部署备忘
  • 【FreeRTOS】创建第一个多任务程序
  • Polar Web【简单】upload
  • 苹果WWDC重磅发布的IOS 18、Apple Intelligence背后的技术分析!
  • [消息队列 Kafka] Kafka 架构组件及其特性(二)Producer原理
  • @jsonView过滤属性
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【知识碎片】第三方登录弹窗效果
  • AHK 中 = 和 == 等比较运算符的用法
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • JSONP原理
  • nginx 负载服务器优化
  • opencv python Meanshift 和 Camshift
  • PHP变量
  • php的插入排序,通过双层for循环
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • WePY 在小程序性能调优上做出的探究
  • 多线程事务回滚
  • 二维平面内的碰撞检测【一】
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 微信支付JSAPI,实测!终极方案
  • 详解NodeJs流之一
  • 优秀架构师必须掌握的架构思维
  • 正则表达式
  • 做一名精致的JavaScripter 01:JavaScript简介
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​批处理文件中的errorlevel用法
  • #宝哥教你#查看jquery绑定的事件函数
  • (1)虚拟机的安装与使用,linux系统安装
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (汇总)os模块以及shutil模块对文件的操作
  • (十一)c52学习之旅-动态数码管
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (轉)JSON.stringify 语法实例讲解
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET 4.0中的泛型协变和反变
  • .NET Standard 支持的 .NET Framework 和 .NET Core