高频面试--redis

news2025/6/3 0:33:16

Reids

1. 常见的数据结构(string, list, hash, set, zset)

答法模板:

Redis 提供五种核心数据结构:

  • String:最基本的类型,支持整数、自增、自减、位操作。

  • List:双端链表,支持消息队列(如 LPUSH/RPOP)。

  • Hash:键值对集合,适合存储对象(如用户信息)。

  • Set:无序集合,支持去重、集合运算(如交并差)。

  • ZSet(Sorted Set):有序集合,元素按 score 排序,适用于排行榜。

可加一句:

实际开发中我用 ZSet 做过文章点赞排行榜,Set 做签到记录,List 做延迟队列等。


2. ZSet 的底层实现

答法模板:

ZSet 底层是 跳表(SkipList)+ 哈希表(HashMap) 的组合:

  • 哈希表用来快速定位元素(O(1));

  • 跳表用于按 score 排序,支持范围查询(O(log n))。

可补一句:

跳表在性能上接近平衡树,但实现简单,Redis 源码中使用跳表而非红黑树。


3. Redis 分布式锁实现(原子性、死锁问题)

答法模板:

Redis 分布式锁常用 SET key value NX PX timeout 保证原子性(一次性设置键和过期时间)。

  • 使用唯一标识避免误删;

  • 删除时用 Lua 脚本保证检查和删除是原子操作;

  • 避免死锁要设置过期时间;

  • 复杂业务推荐用 Redisson,它实现了可重入锁、看门狗续约等机制。


4. AOF 重写机制

答法模板:

AOF(Append Only File)是 Redis 的持久化方式之一。

  • AOF 重写(rewrite)会在文件过大时触发;

  • 并不是清空旧文件,而是重新生成最短命令集合

  • AOF 重写过程是后台线程完成,不影响主线程。

可补一句:

Redis 会同时维护新旧 AOF 文件,在 rewrite 成功后再原子性切换。


5. RDB 的写时复制技术(Copy-On-Write)

答法模板:

RDB 是通过 fork() 子进程生成快照。

  • 子进程把内存数据写入磁盘;

  • 主进程继续服务;

  • Redis 使用写时复制(Copy-On-Write),保证 fork 后内存修改不会影响子进程写入快照。


6. Redis 集群为什么采用 Gossip 协议同步数据

答法模板:

Redis Cluster 中节点通过 Gossip 协议互相传播节点状态,实现故障感知。

  • 每个节点周期性 ping 其他节点;

  • 如果多个节点判断某节点不可达,即认为该节点挂了;

  • Gossip 协议保证了集群的可扩展性和容错性。


7. Redis 分片解决单机实例压力大问题

答法模板:

Redis Cluster 采用哈希槽分片方案,共 16384 个槽位,每个主节点负责一部分槽。

  • key 会通过 CRC16 算法映射到槽;

  • 不同槽分布在不同节点,实现负载均衡;

  • 节点可动态扩容或迁移槽。


8. MySQL 与 Redis 数据一致性问题

答法模板:

Redis 是缓存层,MySQL 是持久层,典型一致性问题有:

  • 缓存穿透:查询不存在数据 → 使用布隆过滤器或缓存空值;

  • 缓存击穿:热点 key 过期瞬间高并发访问 → 加互斥锁(互斥更新);

  • 缓存雪崩:大量 key 同时过期 → 设置过期时间随机化;

  • 读写一致性:采用「先写数据库,后删缓存」策略;或使用消息队列异步刷新。


🧠 总结面试技巧:

  • 回答时注意层次清晰:“现象 → 原因 → 方案”

  • 能举实际项目中的使用更加分

  • 不确定的地方坦诚说“我理解的是……”,不要硬编

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2392609.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CRMEB 单商户Java版 v2.3公测版发布,欢迎体验!

当商城管理后台一成不变时,你是否也有过换换风格的想法? 当商城流量激增时,你是否也希望随时观察服务器负载状况,确保系统稳定运行? CRMEB单商户Java版v2.3公测版发布,更新200管理后台页面、弹窗&#xf…

华为OD机试真题——求最多可以派出多少支队伍(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

《软件工程》第 12 章 - 软件测试

软件测试是确保软件质量的关键环节,它通过执行程序来发现错误,验证软件是否满足需求。本章将依据目录,结合 Java 代码示例、可视化图表,深入讲解软件测试的概念、过程、方法及实践。 12.1 软件测试的概念 12.1.1 软件测试的任务 …

消息队列-kafka为例

目录 消息队列应用场景和基础知识MQ常见的应用场景MQ消息队列的两种消息模式如何保证消息队列的高可用?如何保证消息不丢失?如何保证消息不被重复消费?如何保证消息消费的幂等性?重复消费的原因解决方案 如何保证消息被消费的顺序…

学习STC51单片机20(芯片为STC89C52RCRC)

每日一言 生活不会一帆风顺,但你的勇敢能让风浪变成风景。 串口助手的界面就等于是pc端的页面设置的是pc端的波特率等等参数 程序里面的是单片机的波特率等等参数 串口助手是 PC 端软件 串口助手(如 STC-ISP)是运行在 PC 上的工具&#x…

链路追踪神器zipkin安装详细教程教程

今天分享下zipkin的详细安装教程,具体代码demo可以参考我上篇文章:Spring Cloud Sleuth与Zipkin深度整合指南:微服务链路追踪实战-CSDN博客 一、Zipkin是什么? Zipkin是由Twitter开源的一款分布式追踪系统(现由OpenZ…

bug: uniCloud 查询数组字段失败

问题根源:使用了支付宝云 官方说:2024年11月之后创建的新的支付宝云空间,数组字段查询强制必须设置 array 类型的索引 布尔类型的查询,强制必须设置 bool 类型的索引。 方案一:找到云服务空间-》云数据库-》对应的表-…

视觉分析开发范例:Puppeteer截图+计算机视觉动态定位

一、选型背景:传统爬虫已无力应对的视觉挑战 在现代互联网环境中,尤其是小红书、抖音、B站等视觉驱动型平台,传统基于 HTML 的爬虫已经难以满足精准数据采集需求: 内容加载由 JS 动态触发,难以直接解析 HTML&#xf…

Linux 基础开发工具的使用

目录 前言 一:下载工具yum 二:文本编辑器vim 1. 命令模式 2. 插入模式 3. 底行模式 三:gcc和g 基本使用格式 常用选项及作用 编译过程示例 四、Linux 项目自动化构建工具 ——make/Makefile 1. make 与 Makefile 的关系 2. Make…

华为云Flexus+DeepSeek征文 | Dify-LLM平台一键部署教程及问题解决指南

作者简介 我是摘星,一名专注于云计算和AI技术的开发者。本次通过华为云MaaS平台体验DeepSeek系列模型,将实际使用经验分享给大家,希望能帮助开发者快速掌握华为云AI服务的核心能力。 目录 1. 前言 2. 准备工作 2.1 注册华为云账号 2.2 确…

哈工大计算机系统2025大作业——Hello的程序人生

计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 计算学部 学   号 2023113072 班 级 23L0513 学 生 董国帅 指 导 教 师 史先俊 计算机科学与…

Vue中van-stepper与input值不同步问题及解决方案

一、问题描述 在使用Vant UI的van-stepper步进器组件与原生input输入框绑定同一响应式数据时,出现以下现象: 通过步进器修改值后,页面直接输出{{ count }}和watch监听器均能获取最新值但input输入框显示的数值未同步更新,仍为旧…

react基础技术栈

react基础技术栈 react项目构建react的事件绑定React组件的响应式数据条件渲染和列表循环表单绑定 Props和组件间传值,插槽react中的样式操作 生命周期ref 和 context函数组件和hook高阶组件React性能问题React-route的三个版本react-router使用步骤react-router提供…

Three.js搭建小米SU7三维汽车实战(4)场景搭建

场地搭建 javascript // 导入threejs import * as THREE from "three"; // 导入轨道控制器 import { OrbitControls } from "three/addons/controls/OrbitControls.js"; // 1. 创建场景 const scene new THREE.Scene(); // 2. 创建相机 const camera ne…

Excel 统计某个字符串在指定区域出现的次数

【本文概要】 Excel 统计某个字符串在指定区域出现的次数: 1、Excel 统计一个单元格内的某字符串的出现次数 2、Excel 统计某一列所有单元格内的某字符串的出现次数 3、Excel 统计某一区域所有单元格内的某字符串的出现次数 1、Excel 统计一个单元格内的某字符串的出…

【Linux我做主】进度条小程序深度解析

Linux下C语言进度条程序深度解析 进度条小程序GitHub地址 前言前置知识回车换行(CR/LF)的深度解析历史渊源与技术规范在进度条/倒计时中的应用 缓冲区机制的全面剖析缓冲区引入缓冲类型对比进度条开发中的关键控制 进度条实现以小见大——倒计时倒计时最…

从Homebrew找到openssl.cnf文件并拷贝到Go项目下使用

安装OpenSSL 在 macOS 上下载和安装 OpenSSL 最常见和推荐的方式是使用 Homebrew,这是一个 macOS 缺失的包管理器。 如果您还没有安装 Homebrew,请先安装它。安装 Homebrew 后,安装 OpenSSL 只需要一条命令。 步骤 1:安装 Home…

微信小程序一次性订阅封装

封装代码如下&#xff1a; export async function subscribeMessage(tmplIds: string[]): Promise<ISubscribeMessagePromise> {// 模板ID// 1、获取设置状态const settings (await wx.getSetting({ withSubscriptions: true })).subscriptionsSetting || {}console.log…

安全帽检测算法AI智能分析网关V4守护工地/矿山/工厂等多场景作业安全

一、方案概述​ 在工业生产与建筑施工场景中&#xff0c;安全帽是保障人员安全的重要装备。但传统人工巡检效率低、易疏漏&#xff0c;难以满足现代安全管理需求。AI智能分析网关V4安全帽检测方案&#xff0c;借助人工智能与计算机视觉技术&#xff0c;实现作业现场安全帽佩戴…

Python自动化之selenium语句——打开、关闭浏览器和网页

目录 一、打开谷歌浏览器 1.双击桌面的Pycharm工具 2.新建Python文件&#xff0c;输入文件名 3.新建的Python文件如下 4.安装selenium库 5.导入包 二、打开网页、关闭网页、关闭浏览器 1.导入增加一个时间包 2.使用函数打包之前写的浏览器的配置 3.调用 4.打开百度网…