(高频面试1)Redis缓存穿透、缓存击穿、缓存雪崩

目录

一:缓存数据

1.1 应用场景

1.2:缓存数据出现的问题

1.2.1 缓存穿透

1.2.2 解决办法

1.2.3 缓存击穿

1.2.4 解决办法

1.2.5 缓存雪崩

1.2.6 解决办法


一:缓存数据

1.1 应用场景

数据库查询结果缓存是一种常见的缓存应用场景,它通过将数据库查询的结果存储在缓存中,以便在未来的查询中快速获取这些结果,从而提高应用程序的性能。

1.将不经常更改的数据缓存起来

比如我们的菜品数据、套餐数据、菜品分类数据,这些数据是我们不会经常改变的的,我们可以通过Redis,缓存起来,减少请求到数据库的IO次数,提高性能

2.将查询结果缓存起来

经常被查询的数据可能是消费者比较喜欢的数据,我们可以将查询结果缓存起来,以便下次相同的搜索请求可以直接从缓存中获取数据,而无需再次查询数据库。

3.Redis缓存会话信息(单点登录)

为了缓解我们的服务器压力我们的不同业务可能是放在不同的服务器,为了让我们不同的服务器去认识同一个我,以确保会话在不同服务器之间共享,将登录成功创建的session存入redis中,其他关联项目模块都从该项目中获取登录的session,也就是拿redis中的登录数据。

我们缓存会话信息可以设置缓存时间,当我们的用户长期没有操作时,删除会话信息,让用户重新登录

1.2:缓存数据出现的问题

1.2.1 缓存穿透

一直去数据库请求不存在的数据,缓存中也存不上数据(Id不存在,或者伪造Id)

1.2.2 解决办法

(1)我们通过参数校验,拦截掉不合法的请求

(2)我们可以自定义一个map(数据量较少的时候),先判断map中存在不存在,存在就看缓存,不存在就直接拒绝该请求

(3)布隆过滤器

布隆过滤器底层采用bit数组来存储数据,默认是0,初始化,存在key进行一些列的hash,每个key都会计算出多个位置,把这些位置设置成1,之后如果我们的请求过来请求,用相同的hash去计算位置,如果匹配的多个位是1,说明元素存在,可以访问,不存在拒绝请求

(4)缓存空数据

1.2.3 缓存击穿

我们的缓存热点数据到期,缓存数据失效,同一时间访问的数据量过大,同时访问数据库导致宕机

1.2.4 解决办法

我们对每个请求加锁,防止相同产品的多个请求同时访问数据库

我们可以在过期之前,刷新我们的过期时间

不设置过期时间(预热,手动删除)

1.2.5 缓存雪崩

缓存雪崩:

1.2.6 解决办法

多个热门key同时失效

  1. 我们可以在过期时间戳加上一个随机数,防止我们的相同的key同时失效
  2. 我们可以通过哨兵模式,避免单结点故障,导致整个服务不可用,master宕机了,slave服务器自动升级为master服务
  3. 服务降级:我们配置默认数据,当我们的规定时间内,获取数据失败次数达到我们设置的值,就全局开关打开,去配置中心获取默认数据,如果一分钟内可以获取到两次数据,则把全局开关关闭(限流)

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

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

相关文章

科普js加密时出现的错误

当你在使用Babel解析JavaScript代码时,可能会遇到一个错误信息:“Deleting local variable in strict mode”(在严格模式下删除本地变量)。这个错误信息通常表示你正在尝试删除一个使用let或const关键字声明的变量。在JavaScript的…

性能测试度量指标

1-响应时间 响应时间指从用户或事务在客户端发起一个请求开始,到客户端接收到从服务器端返回的响应结束,这整个过程所消耗的时间 在性能测试实践中,为了使响应时间更具代表性,响应时间通常是指事务的平均响应时间ART 在实践中要…

redis持久化、主从和哨兵架构

一、redis持久化 1、RDB快照(snapshot) redis配置RDB存储模式,修改redis.conf文件如下配置: # 在300s内有100个或者以上的key被修改就会把redis中的数据持久化到dump.rdb文件中 # save 300 100# 配置数据存放目录(现…

Idea安装使用教程~

在本文中,我们将提供关于如何安装 IntelliJ IDEA 的详细步骤。如果您是初学者或只是想尝试一下 IDEA,我们建议您下载 Community 版。如果您需要更多高级功能,可以选择 Ultimate 版。 步骤一:下载 IntelliJ IDEA 首先,…

【SpringCloudAlibaba】Seata分布式事务使用

文章目录 分布式事务问题示例Seata概述、官网一个典型的分布式事务过程处理过程全局GlobalTransactional分布式交易解决方案流程图 Seata安装下载修改conf目录下的application.yml配置文件dashboard demo 分布式事务问题示例 单体应用被拆分成微服务应用,原来的三个…

Springboot+swagger2

1.swagger配置 /*** Swagger 配置文件*/ Configuration public class SwaggerConfig {Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.swagger.two&qu…

Spring Boot @Value读不到Nacos配置中心的值。(properties配置文件)

读不到配置中心的值, 配置中心的配置文件名字(Data ID的值)要以.properties结尾。 如果是yaml,就以yaml命名。

LeetCode377. 组合总和 Ⅳ

377. 组合总和 Ⅳ 文章目录 [377. 组合总和 Ⅳ](https://leetcode.cn/problems/combination-sum-iv/)一、题目二、题解方法一:完全背包一维数组动态规划思路代码分析 方法二:动态规划二维数组 一、题目 给你一个由 不同 整数组成的数组 nums &#xff0…

Java8的Stream用法

Java8 API新增了一个新的抽象流Stream,它可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。Stream就是把集合数据看作流,流在管道中传输,我们可在管道中进行…

Spring MVC:请求转发与请求重定向

Spring MVC 请求转发请求重定向附 请求转发 转发( forward ),指服务器接收请求后,从一个资源跳转到另一个资源中。请求转发是一次请求,不会改变浏览器的请求地址。 简单示例: 1.通过 String 类型的返回值…

GO语言篇之反射

GO语言篇之反射 文章目录 GO语言篇之反射前言获取变量类型获取变量值获取结构体的字段,方法,动态地修改,调用结构体的字段和方法创建变量缺点 前言 Go语言可以在运行期间查看自身结构,在运行时动态地获取结构体的信息&#xff0c…

人工智能训练?量子计算机?显卡!【为什么人工智能需要强大的显卡而不是处理器?量子计算机可以吗?】

人工智能硬件与量子计算机:未来的竞争与合作 人工智能(AI)领域的发展一直以来都与硬件技术密不可分。随着深度学习和神经网络的崛起,图形处理单元(GPU)等硬件成为了AI训练的主要工具。然而,量子…

spring 理解

仅供个人学习,部分转自路人甲,侵删 spring容器 1.基本概念 2.Spring Ioc 容器 3.Spring Aop 4.数据访问 5.Spring MVC 6.事务管理 7.高级特性 8.整合其他框架 9.理解原理 基本概念 spring启动流程,加载配置文件,创建…

2023年基因编辑行业研究报告

第一章 行业发展概况 1.1 定义 基因编辑(Gene Editing),又称基因组编辑(Genome Editing)或基因组工程(Genome Engineering),是一项精确的科学技术,可以对含有遗传信息的…

[JAVAee]Spring的基础介绍

本文章介绍了Spring大致是什么,核心的功能. Spring是什么? Spring指的是Spring Framework(Spring框架). 支持广大的开发场景,能够使应用开发变得简单. 其集成了各种工具,还实现了底层的类的实例化和生命周期的管理. 简单来说,Spring就是拥有众多工具方法的IoC容器 容器?…

常用百宝箱——日志处理

目录 前言 一、logging库 二、logging日志等级 三、logging四大组件 四、封装示例 总结 前言 日志是记录特定时间段或事件的详细信息的文件或记录。它们通过时间戳和关键词或描述符来标识事件或行动。日志可以用于许多目的,例如:故障排除、网络安全…

搭建springcloud注册中心eureka以及admin监控

写该篇文章的目的是为了以后搭建微服务的时候避免踩坑 要求:搭建一个eureka-server注册中心,再构建两个eureka-client注册上去,然后再搭建admin服务注册到注册中心。实现在admin后管页面可观察已注册上去的服务 前提:使用的spri…

Redis 初识与入门

1. 什么是Redis Redis 是一种基于内存的数据库,对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于缓存,消息队列、分布式锁等场景。 Redis 提供了多种数据类型来支持不同的业务场景,比如 String(字符串)、…

关系的定义及表示

关系的定义及表示 1、若集合R是AA的子集&#xff0c;则称R是集合A上的二元关系&#xff0c;简称关系 例&#xff1a;A{1,2}&#xff0c; AA{<1,1>,<1,2>,<2,1>,<2,2>}&#xff0c;AA的任何一个子集都是A上的关系 如&#xff1a; R{<1,1>, &…

java企业数据管理系统

项目介绍 此项目为企业数据管理系统的后端部分&#xff0c;前端部分请参考vue-admin&#xff0c;项目实现了菜单管理、用户管理、角色管理和权限管理四个基础模块&#xff0c;前端菜单管理结合动态路由可自由添加菜单。结合Shiro权限管理实现了菜单和按钮的权限控制。 ❝ 前端…