Redis--不可不知的热门面试题

redis在使用过程中明明内存充足但是插入数据失败怎么排查?

  1. 是否是网络问题:客户端使用脚本定时ping Redis服务器,未有丢包情况,排除网络问题。
  2. 是否是连接池满了:客户端连接池满了,检查客户端连接最大限制maxActive是否足够,Redis服务端连接溢出,无法分配新的连接,检查服务端连接是都达到最大值。
  3. 是否内存不足:看似内存足够,但是redis在保存内存数据到磁盘时候,为了防止主进程假死,会fork一个子进程来完成这个操作,但是这个fork的子进程需要分配和主进程完全相同的内存,此时相当于内存翻倍了,这个时候内存不足以分配fork子进程所需内存,将会导致fork子进程失败无法保存数据到磁盘。

有哪些因素可能导致Redis出现性能问题?

  1. Redis内部的阻塞式操作:
    集合全量查询和聚合操作。
    清空数据库,比如flushall flushdb。
    AOF日志同步写。
    从库加载RDB文件。
  2. Redis的系统配置:
    AOF日志重写的时候需要大量IO操作,虽然fsync是fork子线程在执行,但是主线程会监控子线程,如果需要再次执行fsync的时候,主线程发现上一次的fsync还没有执行完,那么就会阻塞。
    内存大叶机制:linux从2.6.38版本开始支持内存大叶机制,该机制支持2MB的内存叶分配,常规的内存叶分配是按4KB的粒度来执行的,为了保证数据的可靠性保证,需要将数据做持久化保存,Redis客户端写请求可能会修改正在进行持久化的数据, 在这一过程中,Redis就会采用写时复制机制,简单来说就是一旦有数据被修改,Redis并不会直接修改内存的数据,而是将这一部分数据拷贝一部分,然后再进行修改,如果采用了内存大叶,那么即使客户端修改了10KB数据,redis也需要拷贝2MB的的大叶数据,如果采用常规内存叶的话,则只需要拷贝4KB。
  3. Redis内存碎片:数据删除后,Redis的内存并不会马上被回收,释放的内存会交由Redis的内存分配器管理,这时候操作系统肯定还是记录Redis使用了这部分内存,Redis释放的空间可能不是连续的,这就是Redis的内存碎片。

什么时候会发生Redis的ASK重定向?ASK的流程?
当一个slot数据从源节点迁移到目标节点的时候,会出现部分数据在源节点上部分数据在目标节点上,这个时候如果客户端来请求数据,流程如下:

  1. 客户端根据本地slots缓存发送命令到源节点,如果存在键对象则直接执行并返回结果给客户端。
  2. 如果数据不存在源节点,则可能存在于目标节点,这时源节点会回复ASK重定向异常,格式如下:(error)ASK{slot}{targetIP}:{targetPort}。
  3. 客户端从ASK中获取目标节点的信息,在将命令发送到目标节点,存在则返回数据,不存在就返回不存在的信息。

Redis ASK与MOVED的区别?
ASK和MOVED都是对客户端的重定向控制,但是有着本质的区别,ASK重定向说明集群正在进行slot数据迁移,客户端无法知道什么时候 迁移完成,因此只能是临时性的重定向,客户端不会更新slots缓存,但是MOVED重定向说明键对应的槽已经明确指定到新的节点,因此需 要更新slots缓存。

Redis在使用过程中明明内存充足但是插入数据失败怎么排查?

  1. 是否是网络问题,客户端使用脚本定时ping redis服务器,未有丢包情况,排除网络问题。
  2. 是否是连接池满了,客户端连接池满了,检查客户端连接最大限制maxActive是否足够,redis服务端连接溢出,无法分配新的连接,检查服务端连接是都达到最大值。
  3. 是否内存不足,看似内存足够,但是redis在保存内存数据到磁盘时候,为了防止主进程假死,会fork一个子进程来完成这个操作,但是这个fork的子进程需要分配和主进程完全相同的内存,此时相当于内存翻倍了,这个时候内存不足以分配fork子进程所需内存,将会导致fork子进程失败无法保存数据到磁盘。

Redis-MySQL缓存一致性了解吗?缓存一致性方案有哪些?
缓存一致性,MySQL数据库的数据和Redis的缓存数据保证一致,而在使用缓存的时候就需要特别注意缓存一致性的问题,常用的缓存一致性策略有以下几种:

  • 延时双删除策略,在写库前后都进行Redis.del(key)操作,并且设定合理的超时时间,具体是删除缓存,再写数据库,休眠一定时间,再次删除,此方案有短暂的数据不一致性的可能。
  • 订阅MySQL master节点的binglog,消费修改删除binglog语句,binglog相当于一个顺序队列,能够保证对数据操作的顺序性,只要数据库事务完成,提交binglog日志后,根据binglog日志顺序更新缓存,可以保证数据的强一致性,此方案的缺点是需要引入其他组件,如阿里的canal,增加了系统的复杂性。
  • 使用分布式锁,实现缓存一致性,刷新缓存的时候锁定资源,保证同一时间只能有一个客户端刷新缓存。

持续更新ing

如有不正确的地方请各位指出纠正。

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

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

相关文章

深入浅出解析SSL:保障网络安全的加密技术

在数字信息时代,网络安全已成为人们关注的重点。为了在网络传输过程中保护数据的完整性和机密性,我们需要一种强大的安全协议——SSL(安全套接层)。今天德迅云安全就带大家来简单了解下SSL是什么,它的工作原理以及为何…

SpringCloudGateway理论与实践

文章目录 网关介绍为什么需要网关Gateway 使用gateway pom依赖yml 配置重启测试总结 断言过滤器工厂路由过滤器的种类请求头过滤器默认过滤器总结 网关介绍 Spring Cloud Gateway 是一个基于Spring Framework 5,由Spring Cloud团队开发的全新的API网关服务。它旨在…

qtvs2022工程cmakelist.txt添加QCharts模块

find_package(QT NAMES Qt5 COMPONENTS Core Gui Widgets OpenGL Concurrent Charts Sql Network REQUIRED) find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Gui Widgets OpenGL Charts Concurrent Sql Network REQUIRED)这里find_package只是设置搜索路径,为…

ES入门十:关系模型的实现:嵌套类型和父子文档

现实中,关系模型是到处存在的,例如书本与作者的关系。但是在ES中想要处理这个事情并不简单 在ES中保存关系型模型数据的方式主要有以下几种: nested:在这种方式中,会通过一对多的放系保存在同一个文档中join&#xf…

PC电脑可以当服务器使用吗?

PC电脑是一种性能、大小适用于个人使用的多用途计算机,是由硬件系统和软件系统共同组成,能够独立运行并且完成特定功能的设备,那有的人就会问PC电脑可以当做服务器来进行使用吗?答案是可以的。 PC电脑可以当做服务器来使用&#x…

Centos 9 安装 k8s

为了尽可能契合生产环境的部署情况,这里用kubeadm安装集群,同时方便跟随笔记一步步实践的过程,也更加了解k8s的一些特性和基础知识。 先决条件 这里将通过虚拟机安装3台centos stream 9服务器,并组成kubeneters集群(…

Vue基础篇

Vue Vue是一套用于构建用户界面的渐进式JavaScript框架 什么是渐进式? Vue可以自底向上逐层地应用; 当构建简单应用时, 只需一个轻量小巧的核心库; 当构建复杂应用时, 可以引入各式各样的Vue插件 Vue具有以下特点: 采用组件化模式, 提高代码复用率且让代码更好维护 声明式编…

Vue+SpringBoot打造考研专业课程管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 考研高校模块2.3 高校教师管理模块2.4 考研专业模块2.5 考研政策模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 考研高校表3.2.2 高校教师表3.2.3 考研专业表3.2.4 考研政策表 四、系统展示五、核…

Pandas isin()函数介绍

简介 isin() 函数是 Pandas 库中的一个非常实用的函数,主要用于筛选数据框(DataFrame)或序列(Series)中包含特定值的数据。这个函数可以接收一个列表、集合或其他可迭代对象作为参数,并返回一个布尔型的序…

10 个 Java Stream 顶级技巧,大量简化代码

Java Stream API对于 Java 开发人员来说就像一把瑞士军刀 — 它用途广泛、结构紧凑,并且可以轻松处理各种任务。 它为开发人员提供了一种函数式和声明式的方式来表达复杂的数据转换和操作,使代码更加简洁和富有表现力。 但能力越大,责任越大,有效地使用Stream API需要对最…

MySQL学习笔记(一)数据库事务隔离级别与多版本并发控制(MVCC)

一、数据库事务隔离级别 数据库事务的隔离级别有4种,由低到高分别为Read uncommitted (读未提交)、Read committed(读提交) 、Repeatable read(可重复读) 、Serializable (串行化&a…

spingboot控制器中@Autowired的变量为空问题的解决

在控制器中新创建了一个函数,前台可以调用,然后获取记录信息返回。 但是前台调用时,可以进入该函数,但是该函数调用自动注入的变量时,发现该变量为空。但是其他函数都可以正常使用自动注入的变量,该问题就…

芯片后端的APR是指什么?

APR,代表自动布局与布线(Auto Placement & Route),已经成为芯片后端设计的重要部分。在当今EDA(电子设计自动化)工具高度发展的背景下,手动摆放单元格并绘制连线已经变得不切实际。因此&…

如何在异步结果返回时进行跟踪

当我在使用多进程池时,可以通过apply_async()方法提交任务,并使用get()方法获取异步任务的结果。但是,在等待结果返回时,我们最希望能够跟踪任务的进度,以及处理已完成任务的结果。 然后针对这种问题我们最常见的方法…

如何在Spring Boot框架中打印响应的日志?

在 Spring Boot 框架中,可以使用拦截器来打印响应的日志。 通过自定义一个拦截器,可以在响应返回给客户端之前捕获响应信息,并将其记录到日志中。 以下是在 Spring Boot 框架中打印响应日志的步骤: 创建一个拦截器类&#xff0c…

国际数字影像产业园会议中心助力打造舒适高端的会议目的地

国际数字影像产业园会议中心,作为集先进技术与卓越设计于一体的现代化会议场所,正日益成为国内外高端会议活动的首选之地。其独特的建筑风格和内部设施,为与会者提供了舒适而高效的环境,让每一次大中小型会议都能达到预期的效果。…

如何关闭远程桌面连接

远程桌面连接是一种方便的技术,可以让用户通过网络远程访问其他计算机的桌面界面。有时候我们可能需要关闭这个连接。本文将向你介绍如何关闭远程桌面连接。 关闭远程桌面连接的步骤 要关闭远程桌面连接,按照以下步骤操作: 打开远程桌面连接…

最简单 导航栏 html css

dhl.html <!DOCTYPE html> <html><head><meta charset"utf-8"><title>导航栏</title><link type"text/css" rel"stylesheet" href"css/dhl.css"></head><div class"dhl&quo…

TheGraph 教程

官方文档&#xff1a; https://thegraph.com/docs/zh/quick-start/ 简介 The Graph 可以干什么&#xff0c;记录区块链上数据&#xff0c;以前都要有个后端服务和数据库&#xff0c;维护和开发成本大&#xff0c;使用The Graph&#xff0c;方便快捷节省成本 部署 核心&…

数据分析案例-二手车用户数据可视化分析(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…