Redis八股文(二)

news2024/11/16 8:51:30

目录

21.Redis如何实现服务高可用?

22.什么是集群中的脑裂?

23.脑裂导致数据丢失怎么办?   

24.Redis使用的过期删除策略是什么?

25.什么是惰性删除?

26.什么是定期删除?

27.Redis持久化时,对过期键会如何处理?

28.Redis主从模式中,对过期的key如何处理?

29.Redis内存满了,会发生什么?

30.Redis内存淘汰策略有哪些?

31.LRU算法和LFU算法有什么区别?

32.什么是缓存雪崩?如何避免?

33.什么是缓存击穿?如何避免?

34.什么是缓存穿透?如何避免?

35.如何设计一个缓存策略,可以动态缓存热点数据?

36.常见的缓存更新策略有哪些?

37.Redis管道有什么用?

38.Redis事务支持回滚吗?


21.Redis如何实现服务高可用?

        Redis的主从复制、哨兵模式、切片集群

        1)主从复制

        设置一台主Redis服务器,同步数据到多台从Redis服务器,主服务器可以进行读写操作,当写操作到来时会自动同步写操作命令到从服务器上,从服务器一般只读,并接受主服务器同步过来的写命令,然后执行。

主从服务器之间的写操作命令是异步执行的。主服务器执行完写操作命令后会立即返回结果给客户端,并不会等待从服务器完成写命令后再返回结果给客户端。 无法保证主从服务器之间的数据一致性。

        2)哨兵模式

        Redis的主从服务器模式,可能会发生主从服务器故障的问题,哨兵模式可以监控主从服务器,并提供主从服务器之间的故障转移功能。

        3)切片集群(Redis Cluster )模式

        当一台Redis服务器的缓存数据太大时,将大量数据分布在不同的服务器上,降低单服务器的压力,提高读写性能。

        切片集群采用哈希槽来处理数据与节点的映射关系。一个切片集群共有16384个哈希槽,每个键值对会根据其key分配到不同的哈希槽中。

        哈希槽映射到不同Redis节点上的方案有两种:

        平均分配:使用cluster create命令创建集群时,会自动将哈希槽平均分配到不同的节点上,比如有6个节点,那么每个节点有16384/6个哈希槽。

        手动分配:使用cluster meet命令手动建立节点间的连接,创建集群,再使用cluster addslots命令指定节点上的哈希槽个数。手动分配必须将16384个槽都分配完,否则集群无法正常工作。

22.什么是集群中的脑裂?

        Redis主从架构中,一般是一个主节点,多个从节点。客户端和主节点之间的网络连接正常,主节点和从节点之间的网络连接发生了问题,导致主节点和从节点发生失联,哨兵会在从节点中选出一个新的主节点,从而产生了2个主节点,这就是脑裂。

        Tips:如果产生了脑裂问题,这是会有一个旧的主节点A和一个新的主节点B。客户端和旧的主节点(A)连接正常,客户端会向A发送写数据,因为A与从节点之间失联,无法同步,所以会将数据保存在自己的缓冲区中。网络突然好了,这时已经有了新的主节点B了,那么A节点就会被退为从节点,向B节点请求数据同步,此时的A节点就会清空自己缓冲区的内容,再进行全量数据同步。从而造成客户端与A之间数据的丢失。

23.脑裂导致数据丢失怎么办?   

        在 Redis 的配置文件中有两个参数我们可以设置:

        1)min-slaves-to-write x,主节点必须要有至少 x 个从节点连接,如果小于这个数,主节点会禁止写数据。

        2)min-slaves-max-lag x,主从数据复制和同步的延迟不能超过 x 秒,如果超过,主节点会禁止写数据。

        如果不满足上面设置的配置,那么主节点就会返回错误给客户端,禁止写操作。当新的主节点上线后,就只有新的主节点接受客户端的请求。

24.Redis使用的过期删除策略是什么?

        惰性删除 + 定期删除配合使用。

25.什么是惰性删除?

        不主动删除key,每次从数据库访问key时,检测key是否过期,如果没有过期,就返回key对应的value,如果过期了,就删除该key,返回nil。

        优点:每次访问时才检查key是否过期,所以使用很少的资源,对CPU友好。

        缺点:如果长时间没有访问一个已经过期的key,那么该key会一直存储在数据库中,浪费空间资源。

26.什么是定期删除?

        每隔一段时间随机从数据库中取出一定数量的key,检查它们是否过期。

        定期删除的流程

                1)从数据库中随机取20个key;

                2)检查它们是否过期,并删除过期的key;

                3)如果过期的key超过了25%,则继续重复步骤1(循环删除的时长默认不超过25ms)。如果小于25%,则停止,等待下一轮检查。

        优点:减少过期key占用空间,限制循环删除的时长减少对CPU的影响。

        缺点:难以确定删除操作的时长和频率,太频繁,对CPU不友好,太低,浪费空间资源。

27.Redis持久化时,对过期键会如何处理?

        RDB持久化中,分为生成阶段和加载阶段

                1)RDB生成阶段,会检查key是否过期,如果过期,就不会保存到RDB文件中。

                2)RDB加载阶段如果Redis是主服务器,那么就会检查加载的key是否过期,如果过期就不会载入到数据库中;如果Redis是从服务器,无论key是否过期,都载入到数据库中,但是由于主从服务器在数据同步时,从服务器的数据会别情况,所以过期的key对从服务器没有影响。

        AOF持久化中,分为写入阶段和重写阶段:

                1)AOF写入阶段,如果服务器的过期key没有被删除,那么会保留过期key,当服务器中的key被删除后,Redis会向AOF写入DEL命令删除过期的key。

                2)AOF重写阶段,对AOF执行重写时,会检查key是否过期,如果过期了就不会保存到重写后的AOF文件中。

28.Redis主从模式中,对过期的key如何处理?

        从服务器不会进行过期扫描,如果某个key过期了,客户端访问从服务器的过期key,也是可以访问到的。从服务器对过期key的处理依靠主服务器,主服务器的key过期后,会在AOF文件中更新DEL命令删除过期的key,同步到所有的从服务器,从服务器根据该命令删除过期key。

29.Redis内存满了,会发生什么?

        触发内存淘汰机制

30.Redis内存淘汰策略有哪些?

        分为不进行数据淘汰进行数据淘汰策略。

        1)不进行数据淘汰

                i)noeviction(Redis 3.0之后,默认的策略):当内存满时,不淘汰任何数据,而是不再提供服务,直接返回错误。

        2)进行数据淘汰:细分为在设置了过期时间的数据中淘汰在所有数据范围内淘汰

        在设置了过期时间的数据中淘汰

                i)volatile-random:随机淘汰任意key-value

                ii)volatile-ttl:优先淘汰更早过期的key-value

                iii)volatile-lru(Redis 3.0之前默认的淘汰机制):淘汰最近最久未使用的key-value

                iiii)volatile-lfu(Redis 4.0后新增的淘汰策略):淘汰最少使用的key-value

        在所有数据范围内淘汰:

                i)allkeys-random:随机淘汰任意key-value

                ii)allkeys-lru:淘汰最近最久未使用的key-value

                iii)allkeys-lfu(Redis 4.0后新增的淘汰策略):淘汰最少使用的key-value

31.LRU算法和LFU算法有什么区别?

        LRU,最近最久未被使用,在Redis的对象结构体中国添加一个额外字段,记录此数据的最后一次访问时间。        

        LFU,最近最少使用,记录数据的访问次数。

32.什么是缓存雪崩?如何避免?

        缓存雪崩:大量的缓存数据在同一时间全部过期,如果此时有大量是用户请求数据,无法在Redis中获得数据,全部请求都直接访问数据库,导致数据库压力变大,可能会造成数据库宕机,形成一系列连锁反应,造成整个系统崩溃,这就是缓存雪崩。

        解决方案:将缓存过期时间随机打散,防止缓存在同一时间一起过期;设置缓存不过期。

33.什么是缓存击穿?如何避免?

        缓存击穿:当Redis中的某个热点数据过期了,有大量的请求访问该热点数据,就只能访问数据库,数据库很容易就被高并发请求冲垮,这就是缓存击穿。

        解决方案:设置热点数据不过期。

34.什么是缓存穿透?如何避免?

        缓存穿透:访问的数据在Redis和数据库中都不存在,大量的请求造成数据库压力变大,这就是缓存穿透。

        解决方案:在缓存中设置数据对应的值为空值。

35.如何设计一个缓存策略,可以动态缓存热点数据?

        通过数据的最新访问时间作为排名,并过滤掉不常访问的数据,只留下最常访问的数据。

        以电商平台为例,只缓存用户经常访问的1000个商品:

        1)先通过缓存系统创建一个排序队列(1000容量),系统根据商品访问时间进行排序,越是最近访问的商品,越在队列前面。

        2)同时系统定期过滤队列最后面的200个商品,然后从数据库中随机读取200个商品加入队列。

        3)每次请求到达时,先访问队列是否存在被访问的商品ID,如果存在,则就从另一个缓存数据结构中读取实际商品信息。

36.常见的缓存更新策略有哪些?

        1)Cache Aside(旁路缓存)策略,应用程序直接和缓存、数据库交互,具体细分为写策略读策略适合读多写少的场景,实际开发中,Redis和MySQL的缓存更新策略

        写策略:必须先更新数据库中的数据,再删除缓存。

        读策略:先读取缓存中的数据,如果命中则直接返回,如果没命中,则访问数据库,并将数据写到缓存中。

        2)Read/Write Through(读穿/写穿)策略,应用程序只与缓存交互,缓存和数据库交互,并更新数据库。

        3)Write Back(写回)策略:只更新缓存数据,并将数据设置为脏数据,立即返回,并不更新数据库的数据。数据库的更新,会采用批量异步更新。 该策略适合写多的场景。

37.Redis管道有什么用?

        客户端提供的一种批处理技术,可以一次处理多个命令,提高Redis性能,可以解决多个命令执行时的网络等待

        普通模式下:

        管道模式下:

 

38.Redis事务支持回滚吗?

        支持。

        当执行事务的过程中,如果存在执行出错,则事务执行的操作全部撤销,恢复到执行事务的开始状态。

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

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

相关文章

超级详细的SpringSecurity

文章目录 概述与shiro对比快速入门底层原理FilterDelegatingFilterProxyFilterChainProxySecurityFilterChainMultiple SecurityFilterChain 自定义登录流程解析基于内存的用户认证实现基于数据库的用户登录 实现用户新增功能controllerservice修改配置关闭csrf攻击防御修改默认…

python拼接字符串方法

文章目录 1. 使用加号()2. 使用str.join()方法3. 使用格式化字符串(f-strings, % 操作符, .format() 方法)4. 使用列表推导式和join()结合 性能对比 在Python中,字符串拼接是将两个或多个字符串合并成一个新字符串的过…

C++初学(3)

面向对象编程(OOP)的本质是设计并拓展自己的数据类型,设计自己的数据类型就是让类型与数据匹配。内置的C类型分为两组:基本类型和复合类型。这里我们将介绍基本类型的整数和浮点数 3.1、简单变量 3.1.1、变量名 C必须遵循几种简…

理解常见开源协议的区别

本文将介绍几种常见的开源许可证,包括GPL、LGPL、MIT、Apache、BSD 和 木兰协议(Mulan PSL),并详细解释它们的区别。 1. GPL (GNU General Public License) GPL 是最著名和最常用的开源许可证之一,由自由软件基金会 …

【前端 17】使用Axios发送异步请求

Axios 简介与使用:简化 HTTP 请求 在现代 web 开发中,发送 HTTP 请求是一项常见且核心的任务。Axios 是一个基于 Promise 的 HTTP 客户端,适用于 node.js 和浏览器,它提供了一种简单的方法来发送各种 HTTP 请求。本文将介绍 Axio…

如何在 Excel 中恢复临时文件

如果您在退出 Microsoft Excel 之前忘记保存重要的工作簿,这会令人烦恼和头疼。此外,在某些意外情况下,包括计算机突然崩溃、软件本身崩溃等,您精心制作的工作簿可能会消失。但是,您仍然可以使用Excel 临时服务恢复 Ex…

中山大学与Pixocial联手提出CatVTON:轻量化架构与高效训练,助力虚拟试衣技术落地应用!

近日,中山大学和 Pixocial 联合发布了 CatVTON,提出更加轻量化的架构与参数高效训练策略,助力图像虚拟试衣技术向落地应用迈进! 项目已公开论文并开源权重和代码,更有在线 Demo 可以试玩! 给钢铁侠穿上奇异…

Qt Creator初识

目录 一、认识 Qt Creator 1.Qt Creator 概览 2.使用 Qt Creator 新建项目 2.1 新建项目 2.2 选择项目模板 2.3 选择项目路径 2.4 选择构建系统 2.5 填写类信息设置界面 2.6 选择语言和翻译文件 2.7 选择 Qt 套件 2.8 选择版本控制系统 2.9 最终效果 3.认识 Qt Cre…

【详细】Ubuntu下安装qt5

Ubuntu下安装qt5 一. QT安装环境准备1、判断gcc是否安装2、安装g3、安装clang编译器4、安装 clang 5、安装make6、安装make-guile7、安装cmake 二. QT5安装1、安装Qt5的组件2、安装Qt的开发工具3、安装qtcreator4、安装qt55、安装qt charts(可选) 三、安…

VS2022创建C C++ GTEST工程

原因 需要对带代码进行单元测试,选择在Visual studio 中使用GTEST 框架。 实施 创建一个常规的控制台可执行程序。然后使用NUGET安装包 安装GTEST 头文件和动态库,同时安装GTEST ADAPTER。 安装可能提示找不到包源,此时需要根据提示配置一…

【克隆图】python刷题记录

R2-图 目录 DFS BFS ​ps: 图遍历即可,使用字典来记录访问过的结点。 DFS """ # Definition for a Node. class Node:def __init__(self, val 0, neighbors None):self.val valself.neighbors neighbors if neighbors is not None else []…

苹果CMS:资源采集站如何设置定时采集详细教程讲解

我们搭建好站点之后,会自定义一些采集,但是需要每天去手动执行,有时候甚至会忘记,那我们如何处理呢?今天我们就来介绍一下如何设置定时器。 如果按照官方例子来设置定时器会遇到一个问题就是采集的资源未绑定类型&…

极简Springboot+Mybatis-Plus+Vue零基础萌新都看得懂的分页查询(富含前后端项目案例)

目录 springboot配置相关 依赖配置 yaml配置 MySQL创建与使用 (可拿软件包项目系统) 创建数据库 创建数据表 mybatis-plus相关 Mapper配置 ​编辑 启动类放MapperScan 启动类中配置 添加config配置文件 Springboot编码 实体类 mapperc(Dao…

Chiplet SPI User Guide 详细解读

目录 一. 基本介绍 1.1.整体结构 1.2. 结构细节与功能描述 二. 输入输出接口 2.1. IO Ports for SPI Leader 2.2. IO Ports for SPI Follower 2.3. SPI Mode Configuration 2.4. Leader IP和Follower IP功能图 三. SPI Programming 3.1. Leader Register Descripti…

ubuntu 配置opencv-python-imsow()报错

python调用imshow()时出现下面的错误: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-c…

六个开源的PDF转Markdown项目

✨ 1: gptpdf gptpdf 是一个利用VLLM解析PDF为Markdown的工具,几乎完美支持数学公式、表格等。 GPTPDF 是一个使用视觉大模型(如 GPT-4o)将 PDF 文件解析成 Markdown 文件的工具。它主要用于高效地解析 PDF 文档中的排版、数学公式、表格、…

springboot专利信息服务管理系统-计算机毕业设计源码97187

目录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 删除信息流程 2.3 系统功能…

【王佩丰 Excel 基础教程】第三讲:查找、替换、定位

文章目录 前言一、查找与替换1.1、按值查找1.2、按格式查找1.3、是否开启单元格匹配1.4、模糊查询 二、定位工具2.1、名称框的相关操作2.2、批注的相关介绍2.2.1、批注的基本操作2.2.2、批注的格式 2.3、使用 “ 定位条件 ” 解决以下问题 总结 前言 跟着B站学习王佩丰 Excel …

LLM工具调用破局:Few-shot Prompting

在大型语言模型(LLM)的应用中,工具的使用至关重要。我们一直在研究如何提升LLM调用工具的性能。一种常见的提升方法是通过少量样本提示,即将一些模型输入的示例和期望的输出结果直接展示给模型。据Language Models are Few-Shot L…

Jmeter下载、安装、永久汉化(Windows环境)

1、JDK下载 JDK8下载地址https://www.oracle.com/java/technologies/downloads/#java8-windows JDK8的Windows的64位: 2、Jmeter下载 jmeter下载地址https://jmeter.apache.org/download_jmeter.cgi 3、配置环境变量 安装好后,把jdk和jmeter都配置到…