八股学习 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? 心脏扩散张量成像中的异常值检测:射击拒绝还是稳健拟合? 01 文献速递介绍 心脏扩散张量成像(Cardiac Diffusion Tensor Imagin…...
Linux Kernel 之十 详解 PREEMPT_RT、Xenomai 的架构、源码、构建及使用
概述 现在的 RTOS 基本可以分为 Linux 阵营和非 Linux 阵营这两大阵营。非 Linux 阵营的各大 RTOS 都是独立发展,使用上也相对独立;而 Linux 阵营则有多种不同的实现方法来改造 Linux 以实现实时性要求。本文我们重点关注 Linux 阵营的实时内核实现方法! 本文我们重点关注 …...
RabbitMQ-消息消费确认
我们一般使用的是消费者作为被动方接收 RabbitMQ 推送消息,另一种是消费者作为主动方可以主动拉取消息。 RabbitMq 服务器推送消息分为隐式(自动)确认和显示确认。 1 消费者拉取消息 消费者作为主动方拉取消息,每次只能获取一条。 using (var channel c…...
E10.【C语言】练习:编写一个猜数字游戏
目录 1.规则 2.准备 3.游戏代码 1.规则 1.程序生成1-100间的随机数 2.用户猜数字 猜对了:游戏结束 猜错了:程序会告知猜大了或猜小了,继续进行游戏,直到猜对 3.游戏可以一直玩除非退出游戏 2.准备 1.框架:循…...
RK3568-rk809rtc休眠唤醒
参考链接 https://www.360doc.cn/article/71858349_1119199262.html修改驱动drivers/mfd/rk808.c static void rk817_shutdown_prepare(void) { int ret; …...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...
渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
论文阅读:Matting by Generation
今天介绍一篇关于 matting 抠图的文章,抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法,已经有很多的工作和这个任务相关。这两年 diffusion 模型很火,大家又开始用 diffusion 模型做各种 CV 任务了&am…...
解析“道作为序位生成器”的核心原理
解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制,重点解析"道作为序位生成器"的核心原理与实现框架: 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...
WEB3全栈开发——面试专业技能点P4数据库
一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库,基于 mysql 库改进而来,具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点: 支持 Promise / async-await…...
