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

八股学习 Redis

八股学习 Redis

  • 使用场景
  • 常见问题
  • 问题1、2
    • 示例场景
    • 缓存穿透
    • 解决方案一
    • 解决方案二
  • 问题3
    • 示例场景
    • 缓存击穿
    • 解决方案
  • 问题4
    • 示例场景
    • 缓存雪崩
    • 解决方案
  • 问题5
    • 示例场景
    • 双写一致性
    • 强一致方案
    • 允许延时一致方案
  • 问题6
    • RDB方式
    • AOF方式
    • 两种方式对比
  • 问题7
    • 示例场景
    • 惰性删除
    • 定期删除

使用场景

缓存:穿透、击穿、雪崩、双写一致、持久化、数据淘汰、淘汰策略;
分布式锁:setnx、redisson;
计数器保存token消息队列延迟队列:数据类型;


常见问题

  • 什么是缓存穿透,怎么解决?

  • 什么是布隆过滤器?

  • 什么是缓存击穿,怎么解决?

  • 什么是缓存雪崩,怎么解决?

  • Redis双写问题?

  • Redis作为缓存如何实现持久化?

  • Redis的数据过期策略有哪些?

  • Redis的数据淘汰策略有哪些?

  • Redis分布式锁如何实现?

  • Redis实现分布式锁如何合理的控制锁的有效时长?

  • Redis集群有哪些方案?

  • 什么是 Redis 主从同步?

  • 使用的Redis是单点还是集群?哪种集群Redis分片集群中数据是怎么存储和读取的?

  • Redis集群脑裂

  • 怎么保证Redis的高并发高可用?

  • 用过Redis的事务吗?事务的命令有哪些?

  • Redis是单线程的,但是为什么还那么快?


问题1、2

缓存穿透、布隆过滤器

示例场景

在这里插入图片描述

缓存穿透

查询一个不存在的数据,mysql查不到,因此不会直接写入,导致频繁查询数据库;

解决方案一

缓存空数据,即使查询返回数据为空,也仍把空结果缓存;
优点:简单;
缺点:内存消耗,可能导致不一致问题;

解决方案二

布隆过滤器:
在这里插入图片描述
作用:检索一个元素是否在集合中;
在这里插入图片描述

优点:内存占用少,没有多余key;
缺点:实现相对复杂,存在误判;

在这里插入图片描述


问题3

缓存击穿

示例场景

在这里插入图片描述

缓存击穿

给某一个key设置了过期时间,当key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间把DB压垮;

解决方案

在这里插入图片描述
互斥锁
优点:强一致;
缺点:性能差;
逻辑过期
优点:高可用,性能优;
缺点:不能保证数据绝对一致;


问题4

缓存雪崩

示例场景

在这里插入图片描述
在这里插入图片描述

缓存雪崩

指在同一时间段大量的缓存key同时失效或者Redis宕机,导致大量请求到达数据库,带来巨大的查询压力;

解决方案

  • 给不同的key的TTL添加随机值;
  • 利用Redis集群提高服务可用性:哨兵模式、集群模式;
  • 给缓存业务添加降级限流策略:ngxin或spring cloud gateway
  • 给业务添加多级缓存:Guava或者Caffeine

问题5

示例场景

双写一致性
在这里插入图片描述

双写一致性

当修改了数据库的数据,也要同时更新缓存的数据,缓存数据于数据库数据要保持一致;

强一致方案

Redisson提供的读写锁
共享锁:读锁readLock,加锁后,其他线程可以共享读操作;
排它锁:独占锁writeLock,加锁后,阻塞其他线程读写操作;
在这里插入图片描述

允许延时一致方案

MQ中间件:更新数据后,通知缓存删除;
在这里插入图片描述

canal中间件:监听binlog数据更新缓存,不需要修改业务代码;

在这里插入图片描述


问题6

Redis持久化

RDB方式

bgsave开始时会fork主进程得到子进程,子进程 (不是子线程)共享主进程的内存数据,完成fork后读取内存数据并写入RDB文件;
fork采用的是copy-on-write技术

  • 当主进程执行读操作时,访问共享内存;
  • 当主进程执行写操作时,则会拷贝一份数据,执行写操作;
    在这里插入图片描述

AOF方式

AOF全称为Append Only File(追加文件),Redis处理的每一个读写命令都会记录在AOF文件中,可以看作是命令日志文件;
在这里插入图片描述
需要注意的是,AOF默认是关闭的,需要修改redis.conf配置文件来开启AOF:
在这里插入图片描述
AOF命令的记录频率也可以通过redis.conf文件来配置:
在这里插入图片描述
在这里插入图片描述
因为是记录命令,AOF文件会比RDB文件大的多。而且AOF会记录对同一个key的多次写操作,但只有最后一次写操作才有意义。通过执行bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同效果;
在这里插入图片描述
Redis也会在触发阈值时自动去重写AOF文件,阈值也可以在redis.conf中进行配置:
在这里插入图片描述

两种方式对比

RDB和AOF各有优缺点,如果对数据安全性要求较高,在实际开发中往往结合两者来使用;
在这里插入图片描述


问题7

Redis数据过期策略

示例场景

Redis对数据设置数据的有效时间,数据过期以后,就需要将数据从内存中删除掉。可以按照不同的规则进行删除,这种删除规则就被称之为数据的删除策略(数据过期策略)。

惰性删除

设置该key过期时间后,我们不去管它,当需要该key时,我们在检查其是否过期,如果过期,我们就删掉它,反之返回该key;
优点:对CPU友好,只会在使用该key时才会进行过期检查,对于很多用不到的key不用浪费时间进行过期检查;
缺点:对内存不友好,如果一个key已经过期,但是一直没有使用,那么该key就会一直存在内存中,内存永远不会释放;

定期删除

每隔一段时间,我们就对一些key进行检查,删除里面过期的key(从一定数量的数据库中取出一定数量的随机key进行检查,并删除其中的过期key)。
定期清理有两种模式:

  • SLOW模式:定时任务,执行频率默认为10hz,每次不超过25ms,以通过修改配置文件redis.conf的hz 选项来调整这个次数;
  • FAST模式:频率不固定,但两次间隔不低于2ms,每次耗时不超过1ms;

优点:可以通过限制删除操作执行的时长和频率来减少删除操作对 CPU 的影响。另外定期删除,也能有效释放过期键占用的内存。
缺点:难以确定删除操作执行的时长和频率。

Redis的过期删除策略:惰性删除+定期删除两种策略进行配合使用

相关文章:

八股学习 Redis

八股学习 Redis 使用场景常见问题问题1、2示例场景缓存穿透解决方案一解决方案二 问题3示例场景缓存击穿解决方案 问题4示例场景缓存雪崩解决方案 问题5示例场景双写一致性强一致方案允许延时一致方案 问题6RDB方式AOF方式两种方式对比 问题7示例场景惰性删除定期删除 使用场景…...

如何通过高防服务隐藏服务器源IP

在网络安全领域,隐藏服务器的真实源IP地址是保护服务器免受直接攻击的重要手段之一。暴露的源IP地址容易成为黑客攻击的目标,尤其是DDoS攻击、端口扫描和暴力破解等威胁。高防服务(如阿里云盾、AWS Shield等)不仅提供强大的流量清…...

【WEB】网络传输中的信息安全 - 加密、签名、数字证书与HTTPS

文章目录 1. 概述2. 网络传输安全2.1.什么是中间人攻击2.2. 加密和签名2.2.1.加密算法2.2.2.摘要2.2.3.签名 2.3.数字证书2.3.1.证书的使用2.3.2.根证书2.3.3.证书链 2.4.HTTPS 1. 概述 本篇主要是讲解讲一些安全相关的基本知识(如加密、签名、证书等)&…...

借助Claude实现Playwright的自动化(MCP Server)

借助Claude实现Playwright的自动化(MCP Server) MCP Server自己开发也是可以的,现在也有很多开箱即用的MCP Server,可以在https://github.com/modelcontextprotocol/servers中查找 Playwright的MCP Server Playwright的MCP Server是社区开发的,它能够为LLM提供操作浏览器的…...

【区间DP】【hard】力扣730. 统计不同回文子序列

给你一个字符串 s ,返回 s 中不同的非空回文子序列个数 。由于答案可能很大,请返回对 109 7 取余 的结果。 字符串的子序列可以经由字符串删除 0 个或多个字符获得。 如果一个序列与它反转后的序列一致,那么它是回文序列。 如果存在某个 …...

【Vim Masterclass 笔记11】S06L24 + L25:Vim 文本的插入、变更、替换与连接操作同步练习(含点评课)

文章目录 S06L24 Exercise 06 - Inserting, Changing, Replacing, and Joining1 训练目标2 操作指令2.1. 打开 insert-practice.txt 文件2.2. 练习 i 命令2.3. 练习 I 命令2.4. 练习 a 命令2.5. 练习 A 命令2.6. 练习 o 命令2.7. 练习 O 命令2.8. 练习 j 命令2.9. 练习 R 命令2…...

分布式组件底层逻辑是什么?

分布式组件是指在分布式系统中执行特定功能的模块,通常分布在多个物理节点上,共同协作完成任务。其底层逻辑包括多个方面,从通信和数据管理到一致性和容错设计,具体如下: 1.分布式组件的核心特点 分布性:功…...

Spring Boot中的扫描注解如何使用

在 Spring Boot 中,扫描注解是指通过注解来告诉 Spring 框架应该扫描哪些包、哪些类或哪些特定的组件,并将其作为 Spring 容器中的 bean 进行管理。Spring Boot 主要通过以下几种注解来实现自动扫描: ComponentScanSpringBootApplicationCom…...

初识JVM HotSopt 的发展历程

目录 导学 目前企业对程序员的基本要求 面向的对象 实战 学习目标 JVM 是什么 JVM 的三大核心功能 各大 JVM look 看一下虚拟机 HotSopt 的发展历程 总结 导学 目前企业对程序员的基本要求 面向的对象 实战 学习目标 JVM 是什么 JVM 的三大核心功能 即时编译 主要是…...

基于springboot果蔬供应链信息管理平台

基于Spring Boot的果蔬供应链信息管理平台是一种集成了先进信息技术和果蔬供应链管理理念的综合性系统。 一、背景与意义 随着人们生活水平的提高和对健康饮食的重视,果蔬市场需求不断增长。然而,果蔬供应链涉及多个环节,包括种植、采摘、加…...

掌握 React 关键:理解 super () 和 super (props) 的不同应用

在 React 中,super() 和 super(props) 都与 React 类组件的构造函数(constructor)以及继承有关。为了理解它们之间的区别,我们需要了解 JavaScript 类继承机制以及 React 类组件的工作原理。 1. super() 与 super(props) 的区别 …...

Scala语言的软件开发工具

Scala语言的软件开发工具概述 Scala是一种多范式编程语言,它结合了面向对象编程和函数式编程的特性。随着大数据技术的发展和互联网应用的广泛普及,Scala逐渐成为了开发高性能应用和后端服务的热门选择。为了更好地进行Scala开发,开发者需要…...

斯坦福大学李飞飞教授团队ARCap: 利用增强现实反馈收集高质量的人类示教以用于机器人学习

近年来,通过人类示范进行模仿学习在教授机器人操控技能方面取得了令人瞩目的进展。为了进一步扩大训练数据集的规模,近期的研究开始采用便携式数据采集设备,无需依赖物理机器人硬件。然而,由于在数据采集过程中缺乏机器人实时反馈…...

【Linux】从零开始:编写你的第一个Linux进度条小程序

Linux相关知识点可以通过点击以下链接进行学习一起加油!初识指令指令进阶权限管理yum包管理与vim编辑器GCC/G编译器make与Makefile自动化构建GDB调试器与Git版本控制工具 文章目录 一、知识铺垫1.1 回车与换行概念1.2 缓冲区 二、实现简单倒计时三、进度条3.1 Verrs…...

web前端第八次作业---制作音乐榜单

制作音乐榜单 代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><s…...

心脏扩散张量成像中的异常值检测:射击拒绝还是稳健拟合?|文献速递-视觉大模型医疗图像应用

Title 题目 Outlier detection in cardiac diffusion tensor imaging: Shot rejection or robust fitting? 心脏扩散张量成像中的异常值检测&#xff1a;射击拒绝还是稳健拟合&#xff1f; 01 文献速递介绍 心脏扩散张量成像&#xff08;Cardiac Diffusion Tensor Imagin…...

Linux Kernel 之十 详解 PREEMPT_RT、Xenomai 的架构、源码、构建及使用

概述 现在的 RTOS 基本可以分为 Linux 阵营和非 Linux 阵营这两大阵营。非 Linux 阵营的各大 RTOS 都是独立发展,使用上也相对独立;而 Linux 阵营则有多种不同的实现方法来改造 Linux 以实现实时性要求。本文我们重点关注 Linux 阵营的实时内核实现方法! 本文我们重点关注 …...

RabbitMQ-消息消费确认

我们一般使用的是消费者作为被动方接收 RabbitMQ 推送消息&#xff0c;另一种是消费者作为主动方可以主动拉取消息。 RabbitMq 服务器推送消息分为隐式(自动)确认和显示确认。 1 消费者拉取消息 消费者作为主动方拉取消息&#xff0c;每次只能获取一条。 using (var channel c…...

E10.【C语言】练习:编写一个猜数字游戏

目录 1.规则 2.准备 3.游戏代码 1.规则 1.程序生成1-100间的随机数 2.用户猜数字 猜对了&#xff1a;游戏结束 猜错了&#xff1a;程序会告知猜大了或猜小了&#xff0c;继续进行游戏&#xff0c;直到猜对 3.游戏可以一直玩除非退出游戏 2.准备 1.框架&#xff1a;循…...

RK3568-rk809rtc休眠唤醒

参考链接 https://www.360doc.cn/article/71858349_1119199262.html修改驱动drivers/mfd/rk808.c static void rk817_shutdown_prepare(void) { int ret; …...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...

实战设计模式之模板方法模式

概述 模板方法模式定义了一个操作中的算法骨架&#xff0c;并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下&#xff0c;重新定义算法中的某些步骤。简单来说&#xff0c;就是在一个方法中定义了要执行的步骤顺序或算法框架&#xff0c;但允许子类…...