Redis面试题深度解析

1、我看你做的项目中,都用到了redis,你在最近的项目中哪些场景使用了redis呢?

2、缓存穿透

布隆过滤器的误判现象

Redisson和Guava都对布隆过滤器进行了实现

3、缓存击穿

 

互斥锁,就是一个线程来修改,并占据了锁,另外其他的线程想要访问必须拿到锁,否则就休眠重试,等到修改线程结束后把锁释放了,缓存中也就有新的数据,这个时候其他线程也可以拿到数据了。

设置逻辑过期,没有那么的强一致性,但是整体性能 很高,先让线程去拿老的数据,另外开一个线程去更新数据,其他线程来了也会第一时间拿到老的数据

4、缓存雪崩

5、MySQL怎么跟Redis保持一致?

第一种方式:延时双删

先删除缓存,还是先修改数据库?都会有问题

先删缓存在改数据库的情况

正常情况:

异常情况:初始: 缓存是20,数据库是10,线程1是修改操作,线程1先把20的缓存删除掉了,线程2查询不到缓存,接着查数据库查到了10,把10写入到了缓存中,然后线程2又把数据库给更新为20,现在缓存是10,数据库却是20

先操作数据库再删缓存的情况

正常情况

异常情况:

延时的原因是因为数据库是主从的,延时一段时间保证从库已经完成了主库发来的更改

第二种方案 可以使用共享锁+排他锁的方案来解决缓存一致性的问题

第三种方案 异步通知保证数据的最终一致性

 

6、Redis的持久化

7、Redis的过期策略

惰性删除

定期删除

8、Redis的数据淘汰策略

9、分布式锁

分布式锁的使用场景:集群情况下的定时任务、抢单、幂等性等场景

lock.tryLock(第一个参数表示等待锁的最大尝试时间,第二个参数表示锁的自动释放时间(此时看门狗就不会生效了,因为redisson认为你自己有控制锁时长的能力,第三个参数是时间单位)),加锁、设置过期时间等操作都是基于LUA脚本完成的

9.1、Redisson是可重入锁吗?

10、Redis的集群方案

11、Redisson获取锁的源码分析

11.1、redissonClient.getLock

getLock的过程就是对底层的数据做一些准备工作,这个时候锁还没有放到redis中去

11.2、lock.lock()

执行完lua脚本后,在redis里就有锁了

11.3、锁的续期

看门狗续期

每 过期时间/3 时间段过后,就会对锁进行一个续期

11.4、锁的释放

11.5、Redisson是可重入锁吗?

第一次上锁redis中的状态:

第二次上锁redis中的状态:

然后第一次释放锁:

然后第二次释放锁:

11.6、实现分布式锁需要注意哪些问题?

11.6.1、不是原子操作

获取锁+设置过期时间写成一行

11.6.2、没有释放锁

设置过期时间 + 手动释放来保证锁一定会被释放

11.6.3、释放了锁,但是业务还没执行完

锁过期时间30s,但是业务执行了35s,另外的线程就可以拿到锁,可能造成数据的不一致

业务没执行完,就续期

11.6.4、释放了别人的锁

  • 可以加锁的时候给key加一个UUID
  • 释放锁之前判断是否还是当前线程
  • if (lock.isHeldByCurrentThread()) {lock.unlock();}
    

11.6.5、大量请求竞争锁失败

  • 重试
  • 让业务执行时间尽可能短
  • 限流

11.6.6、多节点Redis主从复制的问题

11.6.7、锁的性能问题

11.6.8、锁的可重入问题

12、Redis的应用场景

12.1、Token

 12.2、短信验证码存储

12.3、排行榜

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

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

相关文章

FreeRTOS【8】二值信号量使用

1.开发背景 FreeRTOS 提供了队列可以在线程间快速交换信息,那么还有没有其他交互渠道?答案是有的,相对于队列传递信息,还有更轻量级的线程唤醒操作,那就是信号量,而二值信号量就是最简单的一种。 二值信号量…

SQL开窗函数

文章目录 概念:语法:常用的窗口函数及示例:求平均值:AVG() :求和:SUM():求排名:移动平均计数COUNT():求最大MXA()/小MIN()值求分区内的最大/最小值求当前行的前/后一个值 概念: 开窗…

UML 在 vs-code上的快速使用

UML 在 vs-code上的快速使用 1.软件准备工作2.创建第一张甘特图2.1 创建 UML文件: xxxx. puml2.2 输入甘特图代码2.3 VS code 生成甘特图 结束 。 1.软件准备工作 使用的软件为:VS CODE使用插件 : PluntUML2.创建第一张甘特图 2.1 创建 UML文件: xxxx. …

云端力量:利用移动云服务器高效部署Spring Boot Web应用

文章目录 一、移动云介绍二、移动云产品选择三、体验云主机ECS四、使用移动云服务器部署SpringBoot Web应用4.1移动云ECS安装JDK4.2移动云ECS安装MySQL4.3移动云ECS数据库插入数据4.4移动云ECS部署Spring Boot Web应用 总结 一、移动云介绍 移动云是中国移动基于自研的先进技术…

网络延迟监控

网络中的延迟是指数据通过网络传输到其预期目的地所需的时间,它通常表示为往返延迟,即数据从一个位置传输到另一个位置所需的时间。 网络延迟(也称为滞后)定义为数据包通过多个网络设备进行封装、传输和处理,直到到达…

GitLens或者Git Graph在vscode中对比文件历史变化,并将历史变化同步到当前文件中

有时候我们上周改的代码,现在想反悔把它恢复过来,怎么办???很好,你有这个需求,说明你找对人了,那就是我们需要在vscode中安装这个插件:GitLens或者Git Graph,…

kafka-偏移量图解

生产者偏移量:生产者发送消息时写入到哪个位置(主题的每个分区会存储一个 leo 即将写入消息的偏移量),每次写完消息 leo 会 1 消费者偏移量:消费者从哪个位置开始消费消息,小于等于 leo,每个组…

Pytorch-Reduction Ops

文章目录 前言1.torch.argmax()2.torch.argmin()3.torch.amax()4.torch.amin()5.torch.all()6.torch.any()7.torch.max()8.torch.dist()9.torch.logsumexp()10.torch.mean()11.torch.norm()12.torch.nansum()13.torch.prod()14.torch.cumsum()15.torch.cumprod() 前言 1.torch.…

为师妹写的《Java并发编程之线程池十八问》被表扬啦!

写在开头 之前给一个大四正在找工作的学妹发了自己总结的关于Java并发中线程池的面试题集,总共18题,将之取名为《Java并发编程之线程池十八问》,今天聊天时受了学妹的夸赞,心里很开心,毕竟自己整理的东西对别人起到了一点帮助,记录一下! Java并发编程之线程池十八问 经过…

数据分析必备:一步步教你如何用Pandas做数据分析(11)

1、Pandas 自定义选项 Pandas 自定义选项操作实例 Pandas因为提供了API来自定义行为,所以被广泛使用。 自定义API中有五个相关功如下: get_option() set_option() reset_option() describe_option() option_context() 下面我们一起了解下这些方法。 1.…

Centos安装,window、ubuntus双系统基础上安装Centos安装

文章目录 前言一、准备工作二、开始安装1、2、首先选择DATE&TIME2、选择最小安装3、 选择安装位置 总结 前言 因工作需要,我需要在工控机上额外装Centos7系统,不过我是装在机械硬盘上了不知道对性能是否有影响,若有影响,后面…

Python基于PyQt6制作GUI界面——按钮

示例对应的制作的 ui文件 界面如下所示。 <?xml version"1.0" encoding"UTF-8"?> <ui version"4.0"><class>Form</class><widget class"QWidget" name"Form"><property name"geom…

开源与闭源AI模型的对决:数据隐私、商业应用与社区参与

引言 在人工智能&#xff08;AI&#xff09;领域&#xff0c;模型的发展路径主要分为“开源”和“闭源”两条。这两种模型在数据隐私保护、商业应用以及社区参与与合作方面各有优劣&#xff0c;是创业公司、技术巨头和开发者们必须仔细权衡的重要选择。那么&#xff0c;面对这些…

数据大屏方案 : 实现数据可视化的关键一环_光点科技

在数字时代的浪潮中&#xff0c;数据已经成为企业决策和操作的重要基础。因此&#xff0c;“数据大屏方案”逐渐成为业界关注的焦点。这类方案通过将复杂的数据集合以直观的形式展现出来&#xff0c;帮助决策者快速把握信息&#xff0c;做出更加明智的决策。 数据大屏的定义及作…

运用HTML、CSS设计Web网页——“西式甜品网”图例及代码

目录 一、效果展示图 二、设计分析 1.整体效果分析 2.头部header模块效果分析 3.导航及banner模块效果分析 4.分类classify模块效果分析 5.产品展示show模块效果分析 6.版权banquan模块效果分析 三、HTML、CSS代码分模块展示 1. 头部header模块代码 2.导航及bann…

04_前端三大件JS

文章目录 JavaScript1.JS的组成部分2.JS引入2.1 直接在head中通过一对script标签定义脚本代码2.2创建JS函数池文件&#xff0c;所有html文件共享调用 3.JS的数据类型和运算符4.分支结构5.循环结构6.JS函数的声明7.JS中自定义对象8.JS_JSON在客户端使用8.1JSON串格式8.2JSON在前…

在outlook的邮件中插入HTML;HTML模板获取

本文介绍如何在outlook发送邮件时&#xff0c;在邮件中插入HTML&#xff0c;此HTML可以从获取模板自行进行修改。 文章目录 一、下载HTML模板&#xff08;或自己制作好HTML文件&#xff09;二、outlook新增宏三、新建邮件&#xff0c;插入HTML 一、下载HTML模板&#xff08;或自…

Python--面向对象

面向对象⭐⭐ 1. 面向对象和面向过程思想 面向对象和面向过程都是一种编程思想,就是解决问题的思路 面向过程&#xff1a;POP(Procedure Oriented Programming)面向过程语言代表是c语言面向对象&#xff1a;OOP(Object Oriented Programming)常见的面向对象语言包括:java c g…

Pi 母公司将开发情感 AI 商业机器人;Meta 科学家:Sora 不是视频生成唯一方向丨RTE 开发者日报 Vol.214

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

下一代 CI/CD:利用 Tekton 和 ArgoCD 实现云原生自动化

一、回顾目标 背景&#xff1a; ​ 部门业务上云&#xff0c;之前服务采用传统的部署方式&#xff0c;这种方式简单&#xff0c;但是不能为应用程序定义资源使用边界&#xff0c;很难合理地分配计算资源&#xff0c;而且程序之间容易产生影响。随着互联网时代的到来&#xff…