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

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持久化是定期执行的,数据的持久化是在配置的时间间隔之后
    • 因此在发生故障之前的数据可能会丢失。

相关文章:

Redis面试真题总结(三)

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 什么是缓存雪崩?该如何解决? 缓存雪崩是指…...

ARM/Linux嵌入式面经(三三):大疆

嵌入式工程师考察主要蕴含:C/C++,处理器的架构,操作系统(linux或嵌入式实时操作系统),常见硬件接口协议/总线,文件存储系统等几方面 文章目录 1)C/C++static作用,变量加入static以后在内存中存储位置的变化。static的作用变量加入static后在内存中存储位置的变化面试官…...

《DevOps实践指南》笔记-Part 2

一篇文章显得略长,本文对应第3-4章。前言、第1-2章请参考Part 1;第5-6章、附录、认证考试、参考资源等内容,请参考Part 3。 流动的技术实践 持续交付:降低在生产环境中部署和发布变更的风险。包括:打好自动化部署流水…...

树莓派智能语音助手实现音乐播放

树莓派语音助手从诞生的第一天开始,我就想着让它能像小爱音箱一样,可以语音控制播放音乐。经过这些日子的倒腾,今天终于实现了。 接下里,和大家分享下我的实现方法:首先音乐播放模块用的是我在上一篇博文写的《用sound…...

【sgCreateCallAPIFunctionParam】自定义小工具:敏捷开发→调用接口方法参数生成工具

<template><div :class"$options.name" class"sgDevTool"><sgHead /><div class"sg-container"><div class"sg-start"><div style"margin-bottom: 10px">参数列表[逗号模式]<el-too…...

完整版:NacosDocker 安装

第一步&#xff1a;先直接通过命令安装 Nacos docker run --name nacos2.2.3 -d -p 8848:8848 -e MODEstandalone f151dab7a111 第二步&#xff1a;创建 Docker 挂载目录 # 创建 log 目录 mkdir -p /root/nacos 第三步&#xff1a;将 Docker 容器的文件复制到挂载目录中 …...

mysql RR是否会导致幻读?

除了rr级别的当前读&#xff0c;都会幻读 mysql不同隔离级别&#xff1a; 而对于RC级别的语句级快照和RR级别的事务级快照的之间的区别&#xff0c;其实是由read_view生成的时机来实现的。 RC级别在执行语句时&#xff0c;会先关闭原来的read_view&#xff0c;重新生成新的r…...

一篇进阶Python深入理解函数之高阶函数与函数式编程

当我们深入探讨了函数的作用域与闭包,了解到函数不仅是代码的执行单元,还能通过闭包完成数据的封装与保护.接下来,我们将进一步挖掘函数的强大特性,尤其是高阶函数与函数式编程,帮助你更全面地理解 Python 中函数的特性与应用. 高阶函数 高阶函数是指接受一个或多个函数作为参…...

python中Web开发框架的使用

Python 的 Web 开发框架种类繁多&#xff0c;常见的有 Django 和 Flask 这两个框架。它们各有优点&#xff0c;适合不同类型的 Web 应用开发需求。下面&#xff0c;我将详细介绍这两大主流框架的使用方法&#xff0c;让你快速上手 Python 的 Web 开发。 1. Django Django 是一…...

【AI视频】Runway:Gen-2 运镜详解

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AI视频 | Runway 文章目录 &#x1f4af;前言&#x1f4af;Camera Control&#xff08;运镜&#xff09;&#x1f4af;Camera Control功能测试Horizonta&#xff08;左右平移&#xff09;Vertical&#xff08;上下平移&#xff0…...

Python “函数” ——Python面试100道实战题目练习,巩固知识、检查技术、成功就业

本文主要是作为Python中函数的一些题目&#xff0c;方便学习完Python的函数之后进行一些知识检验&#xff0c;感兴趣的小伙伴可以试一试&#xff0c;含选择题、判断题、实战题、填空题&#xff0c;答案在第五章。 在做题之前可以先学习或者温习一下Python的函数&#xff0c;推荐…...

[产品管理-15]:NPDP新产品开发 - 13 - 产品创新流程 - 具体产品的创新流程:精益生产与敏捷开发

目录 前言&#xff1a;​ 一、集成产品开发IPD模型——集成跨功能团队的产品开发 1.1 概述 1、IPD模型的核心思想 2、IPD模型的主要组成部分 3、IPD模型的实施步骤 4、IPD模型的优点 1.2 基于IPD系统的组织实践等级 1.3 IPD的优缺点 二、瀑布开发模型 1、定义与特点…...

FB仿真模拟PID曲线数据

为了能直观的理解PID的参数调整与曲线数据的变化关系&#xff0c;使用FB写了一个模拟PID曲线数据的程序。 PID类如下&#xff1a; Type PIDController Private : kp_ As Double //比例增益 ki_ As Double //积分增益 kd_ As Double …...

【变化检测】基于ChangeStar建筑物(LEVIR-CD)变化检测实战及ONNX推理

主要内容如下&#xff1a; 1、LEVIR-CD数据集介绍及下载 2、运行环境安装 3、ChangeStar模型训练与预测 4、Onnx运行及可视化 运行环境&#xff1a;Python3.8&#xff0c;torch1.12.0cu113&#xff0c;onnxruntime-gpu1.12.0 likyoo变化检测源码&#xff1a;https://github.c…...

kafka动态认证 自定义认证 安全认证-亲测成功

kafka动态认证 自定义认证 安全认证-亲测成功 背景 Kafka默认是没有安全机制的&#xff0c;一直在裸奔。用户认证功能&#xff0c;是一个成熟组件不可或缺的功能。在0.9版本以前kafka是没有用户认证模块的&#xff08;或者说只有SSL&#xff09;&#xff0c;好在kafka0.9版本…...

航空航司reese84逆向

reese84逆向 Reese84 是一种用于保护网站防止自动化爬虫抓取的防护机制&#xff0c;尤其是在航空公司网站等需要严格保护数据的平台上广泛使用。这种机制通过复杂的指纹识别和行为分析技术来检测和阻止非人类的互动。例如&#xff0c;Reese84 可以通过分析访问者的浏览器指纹、…...

【HTTP】请求“报头”,Referer 和 Cookie

Referer 描述了当前这个页面是从哪里来的&#xff08;从哪个页面跳转过来的&#xff09; 浏览器中&#xff0c;直接输入 URL/点击收藏夹打开的网页&#xff0c;此时是没有 referer。当你在 sogou 页面进行搜索时&#xff0c;新进入的网页就会有 referer 有一个非常典型的用…...

使用sqoop报错

报错一&#xff1a; java.io.IOException: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf 这个错误表示在执行与 Hive 相关的操作时&#xff0c;程序无法找 org.apache.hadoop.hive.conf.HiveConf 这个类。这个类是 Hive 的配置类&#xff0c;它用…...

一个简单的基于C语言的HTTP代理服务器的案例

一个简单的基于C语言的HTTP代理服务器的案例。这个代理服务器可以接收客户端的HTTP请求&#xff0c;并将请求转发到目标服务器&#xff0c;然后将服务器的响应返回给客户端。 1. 代理服务器的主要代码 #include <stdio.h> #include <stdlib.h> #include <stri…...

Linux学习-Ansible(二)

基本配置 #主机清单文件 [rootharbor ansible]# cat hostlist [web] 192.168.29.161 192.168.29.162 [es] 192.168.29.171 192.168.29.172 192.168.29.173 #查看所有被管理的主机 [rootharbor ansible]# ansible all --list-hostshosts (5):192.168.29.161192.168.29.162192.1…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...