当前位置: 首页 > 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…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?

FTP&#xff08;File Transfer Protocol&#xff09;本身是一个基于 TCP 的协议&#xff0c;理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况&#xff0c;主要原因包括&#xff1a; ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...

Django RBAC项目后端实战 - 03 DRF权限控制实现

项目背景 在上一篇文章中&#xff0c;我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统&#xff0c;为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...

【Ftrace 专栏】Ftrace 参考博文

ftrace、perf、bcc、bpftrace、ply、simple_perf的使用Ftrace 基本用法Linux 利用 ftrace 分析内核调用如何利用ftrace精确跟踪特定进程调度信息使用 ftrace 进行追踪延迟Linux-培训笔记-ftracehttps://www.kernel.org/doc/html/v4.18/trace/events.htmlhttps://blog.csdn.net/…...

【Qt】控件 QWidget

控件 QWidget 一. 控件概述二. QWidget 的核心属性可用状态&#xff1a;enabled几何&#xff1a;geometrywindows frame 窗口框架的影响 窗口标题&#xff1a;windowTitle窗口图标&#xff1a;windowIconqrc 机制 窗口不透明度&#xff1a;windowOpacity光标&#xff1a;cursor…...

World-writable config file /etc/mysql/mysql.conf.d/my.cnf is ignored

https://stackoverflow.com/questions/53741107/mysql-in-docker-on-ubuntu-warning-world-writable-config-file-is-ignored 修改权限 -> 重启mysql # 检查字符集配置 SHOW VARIABLES WHERE Variable_name IN (character_set_server, character_set_database ); --------…...