Redis面试真题总结(三)

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

在这里插入图片描述

什么是缓存雪崩?该如何解决?

缓存雪崩是指在缓存中大量的缓存数据同时过期或者缓存服务器宕机,导致大量请求直接访问后端数据库

  • 造成数据库压力过大,甚至引发系统崩溃。

缓存雪崩可能出现的原因包括:

缓存数据同时过期:

  • 在某个时间点,大量的缓存数据同时过期,导致大量请求落到后端数据库。

缓存服务器宕机:

  • 缓存服务器突然宕机或者故障,导致所有请求无法访问缓存,直接访问后端数据库。

为了解决缓存雪崩问题,可以采取以下措施:

设置缓存失效时间的随机性:

  • 在设置缓存失效时间时,可以为不同的缓存设置不同的失效时间,以避免大量数据在同一时间内同时失效。
  • 可以在原有失效时间的基础上加上一个随机的时间,使得失效时间分散化。

使用热点数据永不过期:

  • 对于一些热点数据,可以将其缓存设置为永不过期
    • 以保证热点数据在任何时候都可以快速访问,避免因过期导致的缓存雪崩。

实时监控和预警:

  • 监控缓存系统的状态和数据过期情况,及时发现异常并采取相应的措施
    • 例如提前进行缓存的更新操作,或者在缓存失效前主动将其刷新。

备份缓存服务:

  • 部署多个独立的缓存服务器,以充分利用缓存的高可用性。
  • 如果一个缓存服务器出现故障,其他服务器仍然可以继续提供缓存服务。

数据预热:

  • 在系统启动时,将一些常用或重要的数据预先加载到缓存中,提前热身缓存,减少冷启动时缓存雪崩的风险。

限流和熔断机制:

  • 对缓存系统进行限流控制,可以设置最大并发数、最大请求时间等
    • 以及在缓存故障时启用熔断机制,防止大量请求直接落到后端数据库。

什么是缓存击穿?如何解决?

缓存击穿是指当缓存中没有某个key的数据,这当然会导致缓存无法命中,然后请求就会穿透缓存层,直接访问数据库。

  • 如果这个不命中的请求不止一个,而是成千上万个同时发生
  • 那么就会对数据库形成巨大的访问压力,可能会导致数据库访问瞬间崩溃。

最常见的缓存击穿场景就是有大量请求同时查询一个热点key

  • 但是此时缓存中该key的数据刚好过期,于是大量的请求就会直接穿透到数据库。

针对缓存击穿问题,常见的解决方案有:

设置热点数据永不过期

  • 这种方法适用于某些更新不频繁但是访问非常频繁的热点数据。

缓存数据过期时间设置随机

  • 防止同一时间大量数据过期现象发生。

使用互斥锁(Mutex key)

  • 对于同一个key,只允许一个线程去加载数据,其他线程等待加载完成直接使用即可。

服务降级与熔断

  • 如果数据库压力过大,可以暂时拒绝部分请求,让系统在承受的压力范围内运行。

布隆过滤器的原理是什么?它的优点是什么?缺陷是什么?

布隆过滤器(Bloom Filter)是一种数据结构,用于快速判断一个元素是否属于一个集合

它的原理、优点和缺陷如下:

原理

  • 哈希函数:

    • 布隆过滤器使用多个哈希函数(通常是非加密哈希函数),将输入元素映射成多个不同的位数组索引。
  • 位数组:

    • 布隆过滤器内部维护一个位数组,所有位的初始值都为0。
  • 添加元素:

    • 当要将一个元素添加到布隆过滤器中时,对该元素应用多个哈希函数,然后将相应位数组索引位置的位设置为1。
  • 查询元素:

    • 当要查询一个元素是否存在于布隆过滤器中时
      • 同样对该元素应用多个哈希函数,检查相应位数组索引位置的位是否都为1。
    • 如果所有位都为1,则可能存在;如果有任何一位为0,则一定不存在。

优点

  • 节省内存:

    • 相比于使用散列表或集合等数据结构,布隆过滤器占用的内存较少,因为它只需要维护位数组。
  • 快速查询:

    • 布隆过滤器的查询操作非常快速,通常只需要几个哈希函数的计算和位的检查。
  • 可用于大规模数据:

    • 适用于处理大规模数据集,尤其是在内存有限的情况下
      • 可以快速过滤掉大部分不可能存在的元素,减轻后续查询的压力。

缺陷

误判率:

  • 布隆过滤器可能会产生误判,即判断一个元素存在时,实际上它可能不存在。
    • 这是因为多个元素可能映射到相同的位数组索引,导致冲突。

不支持删除:

  • 由于布隆过滤器的位数组只能设置为1,不能删除元素。
  • 如果需要删除元素,需要重新构建布隆过滤器。

容量不可扩展:

  • 一旦位数组的大小确定,就不能动态扩展
    • 因此需要在设计时估计好位数组的大小以应对数据规模的增长。

RDB 持久化?

RDB(Redis Database)持久化是Redis提供的一种数据持久化方法

  • 它可以将内存中的数据以二进制的形式写入磁盘,以保证数据在重启或者异常情况下的持久性。

RDB持久化工作原理:

快照生成:

  • 当触发RDB持久化时,Redis会将当前内存中的数据通过fork()系统调用创建一个子进程
    • 由子进程负责在后台进行快照生成。

数据存储:

  • 子进程会将内存中的数据按照指定的数据结构和格式保存到一个临时文件中。

替换原文件:

  • 当持久化过程结束后,子进程会将临时文件替换原有的RDB文件。

恢复数据:

  • 在Redis重启的时候,会通过加载RDB文件将数据重新读入内存中。

RDB持久化的优点:

性能高:

  • 由于是在后台进行持久化操作,不会阻塞主线程,所以对Redis的性能影响较小。

容灾性强:

  • 通过RDB文件,可以将数据备份到磁盘中,保证数据在异常情况下的可恢复性。

RDB持久化的缺点:

数据丢失:

  • 由于RDB持久化是通过生成快照的方式进行的
    • 如果Redis在最后一次持久化之后发生故障,会导致最后一次持久化之后的数据丢失。

时效性:

  • RDB持久化是定期执行的,数据的持久化是在配置的时间间隔之后
    • 因此在发生故障之前的数据可能会丢失。

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

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

相关文章

算法课习题汇总(2)

整数划分问题 将正整数n表示成一系列正整数之和&#xff0c;nn1n2…nk(n1>n2>…>nk,k>1)。正整数n的这种表示称为正整数n的划分。 思路&#xff1a; n表示待划分数&#xff0c;m表示最大减数。 #include<iostream> using namespace std;int q(int n, int…

面试题给图例举测试用例或测试点

目录 从功能测试的角度考虑&#xff1a; 从性能角度考虑&#xff1a; 从兼容性的角度考虑&#xff1a; 从自动化角度考虑&#xff1a; 从安全性角度考虑&#xff1a; 用户体验的角度测试&#xff1a; 面试通常会有技术和人事两种&#xff0c;侧重点不一样。 今天聊一下测…

Qt日志输出及QsLog日志库

目录 Qt日志输出及QsLog日志库日志输出格式化日志普通格式化条件格式化环境变量设置格式化日志输出位置日志输出对象信息禁用输出 QsLog日志库使用方法1. 将QsLog目录添加到项目中2. 配置CMakeLists.txt文件3. 配置.pro文件4. 日志记录器的配置5. 运行程序6. 启用行号和文件名C…

有奖直播 | onsemi IPM 助力汽车电气革命及电子化时代冷热管理

在全球汽车行业向电气化和智能化转型的浪潮中&#xff0c;功率管理技术的创新和应用成为了关键驱动力。作为全球领先的半导体解决方案供应商&#xff0c;onsemi&#xff08;安森美&#xff09;致力于通过其先进的智能功率模块&#xff08;IPM&#xff09;技术&#xff0c;推动汽…

[Linux#55][网络协议] 序列化与反序列化 | TcpCalculate为例

目录 1. 理解协议 1.1 结构化数据的传输 序列化与反序列化 代码感知&#xff1a; Request 类 1. 构造函数 2. 序列化函数&#xff1a;Serialize() 3. 反序列化函数&#xff1a;DeSerialize() 补充 4. 成员变量 Response 类 1. 构造函数 2. 序列化函数&#xff1a;…

JavaWeb - 5 - 前端工程化

一.前后端分离开发 前后端混合开发 缺点&#xff1a;沟通成本高&#xff0c;分工不明确&#xff0c;不便管理&#xff0c;不便维护拓展 前后端分离开发 当前最为主流的开发模式&#xff1a;前后端分离 前后端分离开发中很重要的是API接口文档&#xff08;如&#xff1a;YApi&…

胤娲科技:谷歌DeepMind祭出蛋白质设计新AI——癌症治疗迎来曙光

在科技的浩瀚星空中&#xff0c;DeepMind的“阿尔法”家族总是能带来令人瞩目的璀璨光芒。这一次&#xff0c;它们再次以惊人的姿态&#xff0c; 将AI的触角深入到了生命的微观世界——蛋白质设计领域&#xff0c;为我们描绘了一幅未来医疗的宏伟蓝图。 想象一下&#xff0c;一…

Scrapy爬虫实战——某瓣250

# 按照我个人的习惯&#xff0c;在一些需要较多的包作为基础支撑的项目里&#xff0c;习惯使用虚拟环境&#xff0c;因为这样能极大程度的减少出现依赖冲突的问题。依赖冲突就比如A、B、C三个库&#xff0c;A和B同时依赖于C&#xff0c;但是A需要的C库版本大于N&#xff0c;而B…

VUE3配置路由(超级详细)

第一步创建vue3的项目

多版本node管理工具nvm

什么是nvm&#xff1f; 在项目开发过程中&#xff0c;使用到vue框架技术&#xff0c;需要安装node下载项目依赖&#xff0c;但经常会遇到node版本不匹配而导致无法正常下载&#xff0c;重新安装node却又很麻烦。为解决以上问题&#xff0c;nvm&#xff1a;一款node的版本管理工…

微服务-- Sentinel的使用

目录 Sentinel&#xff1a;微服务的哨兵 生态系统景观 sentinel与spring cloud Hystrix 对比 Sentinel 主要分为两部分 Sentinel安装与使用 Sentinel的控制规则 流控规则 流控规则的属性说明 新增流控规则 关联流控模式 SentinelResource注解的使用 SentinelResou…

mysql-死锁

文章目录 1、概念1.1、创建表 account1.2、id 自动创建 主键索引 primary1.3、name 没有创建索引 2、产生死锁的必要条件2.1、此时 name 没有创建 索引 3、如何处理死锁3.1、方式1&#xff1a;等待&#xff0c;直到超时&#xff08;innodb_lock_wait_timeout50s&#xff09;3.2…

GRE隧道在实际部署中的优化、局限性与弊端

GRE的其他特性 上一篇光讲解配置就花了大量的篇幅&#xff0c;还一些特性没有讲解的&#xff0c;这里在来提及下。 1、动态路由协议 在上一篇中是使用的静态路由&#xff0c;那么在动态路由协议中应该怎么配置呢&#xff1f; undoip route-static 192.168.20.0 255.255.255.0 …

element-plus的菜单组件el-menu

菜单是几乎是每个管理系统的软件系统中不可或缺的&#xff0c;element-plus提供的菜单组件可以快速完成大部分的菜单的需求开发&#xff0c; 该组件内置和vue-router的集成&#xff0c;使用起来很方便。 主要组件如下 el-menu 顶级菜单组件 主要属性 mode:决定菜单的展示模式…

2024/9/20 使用QT实现扫雷游戏

有三种难度初级6x6 中级10x10 高级16x16 完成游戏 游戏失败后&#xff0c;无法再次完成游戏&#xff0c;只能重新开始一局 对Qpushbutton进行重写 mybutton.h #ifndef MYBUTTON_H #define MYBUTTON_H #include <QObject> #include <QWidget> #include <QPus…

2024年8月HarmonyOS鸿蒙应用开发者高级认证全新题库

有题库在手&#xff0c;一小时轻松拿下鸿蒙高级。你们需要也可以无偿分享哦&#xff01; 项目需要为不同的设备形态(如手机 、 智能手表)提供定制化构建 。请说明如何在 DevEcostudio 中 设置不同的构建配置&#xff0c; 以生成针对不同设备的 hap 包&#xff1a; 在模块级别 b…

JavaWeb的Filter详解

过滤器Filter 什么是Filter&#xff1f; 依据字面上的中文意思为过滤器。Filter的作用 当用户的请求到达指定的URL之前&#xff0c;可以借助Filter来改变这些请求的内容&#xff1b;同样地&#xff0c;当响应结果到达客户端之前&#xff0c;可以使用Filter修改输出的内容。什么…

【数据结构入门】排序算法之三路划分与非比较排序

文章目录 前言 一、三路划分优化 1.1. 基本思想 1.2. 实现步骤 1.3. 优点 1.4 代码实现 二、非比较排序 2.1 计数排序 2.1.1基本思想 2.1.2具体步骤 2.1.3算法特性 2.1.4算法实现 2.2 基数排序 2.2.1基本思想 2.2.2具体步骤 2.2.3 基数排序的方法 2.2.4算法特…

MongoDB在Linux系统中的安装与配置指南

在这篇文章中&#xff0c;我们将介绍如何在CentOS 7服务器上安装MongoDB&#xff0c;并通过DataX将数据从MongoDB迁移到MySQL数据库。这将包括MongoDB的安装、配置、数据准备以及使用DataX进行数据迁移的详细步骤。 MongoDB简介 MongoDB是一个高性能、开源、无模式的文档型数据…

Leetcode面试经典150题-97.交错字符串

给定三个字符串 s1、s2、s3&#xff0c;请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下&#xff0c;其中每个字符串都会被分割成若干 非空 子字符串 &#xff1a; s s1 s2 ... snt t1 t2 ... tm|n - m| < 1交错 是…