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

【Redis】高频面试题

提供五种常见的数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)

文章目录

    • 1、为什么用Redis作为MySQL的缓存
    • 2、Redis为什么快
    • 3、Redis主从复制
    • 4、Redis持久化
      • AOF日志/RDB快照是如何实现配合完成持久化
    • 5、Redis和MySQL不一致如何解决
    • 6、Redis缓存【雪崩】【击穿】【穿透】
    • 7、Redis过期删除策略和内存淘汰策略
    • 8、Redis大Key问题
    • 9、布隆过滤器是?底层原理是?
    • 10、Redis实现分布式锁

1、为什么用Redis作为MySQL的缓存

Redis具有高性能高并发两种特性

2、Redis为什么快

1、Redis 的大部分操作都在内存中完成,并且采用了高效的数据结构
2、采用单线程模型可以避免了多线程之间的竞争,省去了多线程切换带来的时间和性能上的开销,而且也不会导致死锁问题
3、Redis 采用了 I/O 多路复用机制处理大量的客户端 Socket 请求,IO 多路复用机制是指一个线程处理多个 IO 流,就是我们经常听到的 select/epoll 机制

3、Redis主从复制

将从前的一台 Redis 服务器,同步数据到多台从 Redis 服务器上,即一主多从的模式,且主从服务器之间采用的是「读写分离」的方式。
主服务器可以进行读写操作,当发生写操作时自动将写操作同步给从服务器,而从服务器一般是只读,并接受主服务器同步过来写操作命令,然后执行这条命令。
主从服务器之间的命令复制是异步进行的

4、Redis持久化

Redis 的读写操作都是在内存中,所以 Redis 性能才会高,但是当 Redis 重启后,内存中的数据就会丢失,那为了保证内存中的数据不会丢失,Redis 实现了数据持久化的机制,这个机制会把数据存储到磁盘,这样在 Redis 重启就能够从磁盘中恢复原有的数据。

AOF 日志:每执行一条写操作命令,就把该命令以追加的方式写入到一个文件里
RDB 快照:将某一时刻的内存数据,以二进制的方式写入磁盘
混合持久化方式:Redis 4.0 新增的方式,集成了 AOF 和 RBD 的优点

AOF日志/RDB快照是如何实现配合完成持久化

1、AOF持久化
AOF 持久化通过记录 Redis 服务器收到的写命令来记录数据变更。
每个写命令都会以文本方式追加到 AOF 文件末尾,保证了数据的持久化。
当 Redis 重启时,会通过重新执行 AOF 文件中的命令来还原数据状态。

2、RDB持久化
RDB 持久化通过生成一个二进制的 RDB 快照文件来保存 Redis 在某个时间点的数据快照。
RDB 快照是 Redis 数据在某个时刻的完整备份,通常用于全量恢复数据。
可以通过配置定时保存或手动触发生成 RDB 快照文件。

5、Redis和MySQL不一致如何解决

1、定期同步数据:定期将 MySQL 中的数据同步到 Redis 中,确保数据的一致性。可以通过编写脚本或使用定时任务来实现数据同步的操作。

2、使用消息队列:将 MySQL 的数据变更通过消息队列发送到 Redis,然后在 Redis 中进行相应的更新操作,确保数据的同步性。这种方式可以减少直接对数据库的读写操作,提高系统的性能。

3、采用双写模式:对于写操作,先更新 MySQL,然后再更新 Redis,确保两者数据的一致性。这种方式虽然会增加写操作的时间,但可以保证数据的准确性。

4、实现数据同步机制:可以通过监听 MySQL 数据库的 binlog 或者使用类似 Canal 这样的工具来捕获数据变更,然后同步到 Redis 中,保持数据的一致性。

5、处理数据冲突:如果出现数据不一致的情况,可以编写相应的逻辑来处理数据冲突,例如选择某个数据源作为主数据源,或者进行数据合并等操作。

6、Redis缓存【雪崩】【击穿】【穿透】

1、缓存雪崩:大量数据同时过期、redis故障

2、缓存击穿:热点数据缓存过期

3、缓存穿透:数据既不在缓存,也不知数据库

7、Redis过期删除策略和内存淘汰策略

1、过期删除策略:对 key 设置过期时间

# 设置过期时间
set key1 20 ex 100    # 秒
setex key1 100 20     # 秒
set key1 20 px 100    # 毫秒# 查看过期时间还剩多少
ttl key1# 取消过期时间
persist key1
# 使用完 persist 命令之后,查下 key1 的存活时间结果是 -1,表明 key1 永不过期 
> ttl key1 
(integer) -1

2、内存淘汰策略:当 Redis 的运行内存已经超过 Redis 设置的最大内存之后,则会使用内存淘汰策略删除符合条件的 key,以此来保障 Redis 高效的运行

使用 config get maxmemory-policy 命令,来查看当前 Redis 的内存淘汰策略

通过“config set maxmemory-policy <策略>”命令设置。它的优点是设置之后立即生效,不需要重启 Redis 服务,缺点是重启 Redis 之后,设置就会失效。通过修改 Redis 配置文件修改,设置“maxmemory-policy <策略>”,它的优点是重启 Redis 服务后配置不会丢失,缺点是必须重启 Redis 服务,设置才能生效。

8、Redis大Key问题

存储在 Redis 中占用大量内存空间的 Key
内存占用过高、影响性能、内存碎片问题

【解决】

1、分布式存储:将大 Key 拆分为多个小 Key,并分布存储在不同的 Redis 实例或节点中,避免单个 Key 过大造成问题。

2、数据分页:对于大数据量的 Key,可以采用分页查询的方式,按需加载数据,而不是一次性获取所有数据。

3、合理设计数据结构:根据业务需求合理设计数据结构,避免存储过大的数据对象,尽量将数据拆分为多个小 Key 存储。

4、定时清理:定期清理不再需要的大 Key,释放内存空间,避免内存占用过高。

5、监控和优化:通过监控 Redis 实例的内存占用情况,及时发现并优化存在大 Key 的情况,保持 Redis 实例的健康运行。

9、布隆过滤器是?底层原理是?

布隆过滤器(Bloom Filter)是一种空间效率高、适合大规模数据集的概率型数据结构,用于快速判断一个元素是否存在于一个集合中。它可以有效地减少对存储系统的查询压力,特别适用于需要快速判断某个元素是否可能存在于一个大型集合中的场景。

布隆过滤器的底层原理主要基于以下两个关键组件:

  1. 位数组(Bit Array):布隆过滤器使用一个足够长的二进制位数组来存储数据。数组的每一位都初始化为0,当向过滤器中添加元素时,会通过一系列哈希函数计算出元素在数组中的位置,并将这些位置对应的位设置为1。
  2. 哈希函数(Hash Functions):布隆过滤器使用多个哈希函数来计算元素在位数组中的位置。每个哈希函数都会将元素映射到位数组中的一个特定位置。当元素被添加到过滤器中时,所有哈希函数都会计算出对应的位置,并将这些位置的位设置为1。同样地,当查询一个元素时,也会使用相同的哈希函数来计算元素在位数组中的位置,并检查这些位置的位是否都为1。如果所有位置的位都为1,则认为元素可能存在于集合中;否则,认为元素一定不存在于集合中。

10、Redis实现分布式锁

Redis通过使用SETNX(SET if Not eXists)指令来实现分布式锁,客户端尝试在Redis中设置指定的键值对,如果该键不存在则设置成功并获得锁,否则设置失败表示锁已被其他客户端获取,这种方式能够确保在分布式环境下实现原子性的加锁操作。

具体略

相关文章:

【Redis】高频面试题

提供五种常见的数据类型&#xff1a;String&#xff08;字符串&#xff09;&#xff0c;Hash&#xff08;哈希&#xff09;&#xff0c;List&#xff08;列表&#xff09;&#xff0c;Set&#xff08;集合&#xff09;、Zset&#xff08;有序集合&#xff09; 文章目录 1、为什…...

数据分析基础

数据分析基础 1. 数据加载 使用 Pandas 库可以轻松地加载各种格式的数据&#xff0c;如 CSV、Excel、JSON 等。 import pandas as pd# 从 CSV 文件加载数据 data pd.read_csv(‘data.csv’). 2. 数据探索 一旦数据加载完成&#xff0c;我们可以开始对数据进行探索性分析&a…...

ffmpeg把一个平面视频,做成左右平面视频

要使用FFmpeg将单个平面视频转换为左右&#xff08;或称为并排&#xff09;3D格式的视频&#xff0c;你可以使用FFmpeg的filter_complex功能来实现。这种类型的视频通常用于3D视觉效果&#xff0c;其中同一画面的两个版本并排放置&#xff0c;每个版本略有不同的视角&#xff0…...

Docker搭建LNMP环境实战(02):Win10下安装VMware

实战开始&#xff0c;先安装 VMware 虚拟机。话不多说&#xff0c;上手就干&#xff01; 1、基本环境检查 1.1、本机Bios是否支持虚拟化 进入&#xff1a;任务管理器- 性能&#xff0c;查看“虚拟化”是否启用&#xff0c;如果已启用&#xff0c;则满足要求&#xff0c;如果未…...

苍穹外卖笔记

苍穹外卖 DAY01nginx反向代理MD5加密yapi进行接口导入Swagger介绍 DAY02新增员工需求分析和设计写相关代码测试(1. 后端文档测试 2. 前后端联调代码完善 员工分页查询DAY01 02涉及到的知识 DAY03阿里云OSS事务注解 Transactional DAY01 nginx反向代理 MD5加密 拓展&#xff1…...

[医学分割大模型系列] (3) SAM-Med3D 分割大模型详解

[医学分割大模型系列] -3- SAM-Med3D 分割大模型解析 1. 特点2. 背景3. 训练数据集3.1 数据集收集3.2 数据清洗3.3 模型微调数据集 4. 模型结构4.1 3D Image Encoder4.2 3D Prompt Encoder4.3 3D mask Decoder4.4 模型权重 5. 评估5.1 评估数据集5.2 Quantitative Evaluation5.…...

【React】React中将 Props 传递给组件

当使用 React 时&#xff0c;props 是组件之间传递数据的主要方式。以下是针对您提到的五个问题的详细解答&#xff1a; 1. 如何向组件传递 props 在父组件中&#xff0c;你可以通过组件标签的属性&#xff08;attributes&#xff09;将 props 传递给子组件。这些属性在子组件…...

JOL工具查看java对象布局

JOL&#xff08;Java Object Layout&#xff09;是一个用于分析Java对象在Java虚拟机&#xff08;JVM&#xff09;中内存布局的小工具包。以下是如何使用JOL查看Java对象布局的步骤示例&#xff1a; Maven项目中添加依赖&#xff1a; 首先&#xff0c;在Maven项目中引入JOL工…...

Rust 实战练习 - 3. 文件系统,权限,读写,路径组合,time

目标: 文件系统&#xff0c;遍历目录路径的使用权限和文件属性时间time use std::{env, fmt::Debug, os::unix::fs::{MetadataExt, PermissionsExt}, path::{Path, PathBuf}, time::SystemTime};fn main() {// 时间处理// 除Duration和SystemTime外&#xff0c;标准库没有时间…...

既有理论深度又有技术细节——深度学习计算机视觉

推荐序 我曾经试图找到一本既有理论深度、知识广度&#xff0c;又有技术细节、数学原理的关于深度学习的书籍&#xff0c;供自己学习&#xff0c;也推荐给我的学生学习。虽浏览文献无数&#xff0c;但一直没有心仪的目标。两周前&#xff0c;刘升容女士将她的译作《深度学习计…...

Flink Temporal Join 系列 (2):用 Temporal Table DDL 实现基于处理时间的关联

本文要演示的是:使用 Temporal Table DDL 定义被关联表(维表),然后基于主动关联表(事实表)的“处理时间”去进行Temporal Join(关联时间维度上对应版本的维表数据)。该演示涉及三个要点: 被关联的表(维表)是用 Temporal Table DDL 形式定义,必须是一张时态表(版本…...

eclipse中使用PlantUML plugin查看对象关系

一.背景 公司安排的带徒弟任务&#xff0c;给徒弟讲了如何设计对象。他们的思维里面都是单表增删改查&#xff0c;我的脑海都是一个个对象&#xff0c;他们相互关系、各有特色本事。稳定的结构既能满足外部功能需求&#xff0c;又能在需求变更时以最小代价响应。最大程度的记录…...

HCIP的学习(4)

GRE和MGRE VPN---虚拟专用网络。指依靠ISP&#xff08;运营商&#xff09;或其他公有网络基础设施上构建的专用的安全数据通信网络。该网络是属于逻辑上的。​ 核心机制—隧道机制&#xff08;封装技术&#xff09; GRE—通用路由封装 ​ 三层隧道技术&#xff0c;并且是属于…...

MySQL写shell的问题

写shell用什么函数&#xff1f; select <?php phpinfo()> into outfile D:/shelltest.phpdumpfilefile_put_contentsoutfile不能用了怎么办&#xff1f; select unhex(udf.dll hex code) into dumpfile c:/mysql/mysql server 5.1/lib/plugin/xxoo.dll;可以UDF提权https…...

每天学习一会java(第一天)----条件运算符

今天学习的是条件运算符 1.描述&#xff1a; 条件运算符由“?”与 “:” 两个符号组成&#xff0c;必须一起使用&#xff0c;是 JAVA 中唯一的三目&#xff08;三元&#xff09;运算符&#xff0c;需要三个操作数才能进行运算。 条件表达式的一般使用形式为&#xff1a; 表达…...

hyperf 二十八 修改器 一

教程&#xff1a;Hyperf 一 修改器和访问器 根据教程&#xff0c;可设置相关函数,如set属性名Attribute()、get属性名Attribute()&#xff0c;设置和获取属性。这在thinkphp中也常见。 修改器&#xff1a;set属性名Attribute()&#xff1b;访问器&#xff1a;get属性名Attri…...

ubuntu20.04安裝輸入法

文章目录 前言一、操作過程1、安装fcitx-googlepinyin2、配置language support 前言 參考文獻 一、操作過程 1、安装fcitx-googlepinyin sudo apt-get install fcitx-googlepinyin2、配置language support 第一次點擊進去&#xff0c;會讓你安裝 點擊ctrl和空格切換中英文…...

2024年【熔化焊接与热切割】考试报名及熔化焊接与热切割找解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 熔化焊接与热切割考试报名考前必练&#xff01;安全生产模拟考试一点通每个月更新熔化焊接与热切割找解析题目及答案&#xff01;多做几遍&#xff0c;其实通过熔化焊接与热切割实操考试视频很简单。 1、【单选题】 下…...

聚类分析|基于层次的聚类方法及其Python实现

聚类分析|基于层次的聚类方法及其Python实现 0. 基于层次的聚类方法1. 簇间距离度量方法1.1 最小距离1.2 最大距离1.3 平均距离1.4 中心法1.5 离差平方和 2. 基于层次的聚类算法2.1 凝聚&#xff08;Agglomerative&#xff09;2.3 分裂&#xff08;Divisive&#xff09; 3. 基于…...

前端实现导出xlsx功能

1.安装xlsx插件 npm install xlsx 2.示例 import XLSX from xlsx;// 示例数据 const data [[Name, Age, Country],[Alice, 25, USA],[Bob, 30, Canada],[Charlie, 28, UK] ];// 创建一个 Workbook 对象 const wb XLSX.utils.book_new(); const ws XLSX.utils.aoa_to_sheet…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...

Python 高效图像帧提取与视频编码:实战指南

Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...

高考志愿填报管理系统---开发介绍

高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发&#xff0c;采用现代化的Web技术&#xff0c;为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## &#x1f4cb; 系统概述 ### &#x1f3af; 系统定…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter

java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用&#xff08;Math::max&#xff09; 2 函数接口…...