面试宝典-【redis】

目录

1.什么是缓存穿透 ? 怎么解决 ?

2.什么是布隆过滤器 

3.什么是缓存击穿 ? 怎么解决 ?

4.什么是缓存雪崩 ? 怎么解决 ? 

5.redis做为缓存,mysql数据如何与redis进行同步?(双写) 

6.排他锁是如何保证读写、读读互斥的呢? 

7.你听说过延时双删吗?为什么不用它呢? 

8.redis做为缓存,数据的持久化是怎么做的?

9.这两种持久化方式有什么区别呢? 

10.这两种方式,哪种恢复的比较快呢? 

11.Redis的数据过期策略有哪些 ?

12.Redis的数据淘汰策略有哪些 ?

13.数据库有1000万数据 ,Redis只能缓存20w数据, 如何保证Redis中的数据都是热点数据 ?

14.Redis的内存用完了会发生什么?

15.Redis分布式锁如何实现 ?

16.如何控制Redis实现分布式锁有效时长呢?

17.redisson实现的分布式锁是可重入的吗?

18.Redis集群有哪些方案, 知道吗 ? 

19.介绍一下主从同步 ?

20.主从同步数据的流程?

21.怎么保证Redis的高并发高可用?

22.你们使用redis是单点还是集群,哪种集群?

23.redis的分片集群有什么作用 ?

 24.Redis分片集群中数据是怎么存储和读取的?

25.Redis是单线程的,但是为什么还那么快? 

26.能解释一下I/O多路复用模型?

27.五种常用的数据类型? 


1.什么是缓存穿透 ? 怎么解决 ?

  • 缓存穿透是指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到 DB 去查询,可能导致 DB 挂掉。

解决方案

  • 1.缓存空数据,查询返回的数据为空,仍把这个空结果进行缓存
  • 2.布隆过滤器

2.什么是布隆过滤器 

  • 布隆过滤器主要是用于检索一个元素是否在一个集合中。
  • 它的底层主要是先去初始化一个比较大数组,里面存放的二进制0或1。在一开始都是0,当一个key来了之后经过3次hash计算,模于数组长度找到数据的下标然后把数组中原来的0改为1,查找数据的时候,使用相同hash函数判断对用位置是否相等

缺点:

  • 布隆过滤器有可能会产生一定的误判,我们一般可以设置这个误判率
误判率:数组越小误判率就越大,数组越大误判率就越小,但是同时带来了更多的内存消耗。

3.什么是缓存击穿 ? 怎么解决 ?

  • 给某一个key设置了过期时间,当key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间把DB压垮

解决方案

  • 1.分布式锁 (强一致,性能差)
  • 2.逻辑过期 使用字段设置过期时间(高可用,性能优)
  • 3.不设置过期时间

4.什么是缓存雪崩 ? 怎么解决 ? 

  • 缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。

解决方案

  • 1.给不同的key的TTL添加随机值
  • 2.利用Redis集群提高服务的可用性
  • 3.给业务添加降级限流策略
  • 4.添加多级缓存

5.redis做为缓存,mysql数据如何与redis进行同步?(双写) 

  • 双写一致性:当修改了数据库的数据也要同时更新缓存的数据,缓存和数据库的数据要保持一致

解决方案

  • 1.强一致性:
    • 使用redisson读写锁
  • 2.实时性不高
    • 异步同步数据

6.排他锁是如何保证读写、读读互斥的呢? 

  • 排他锁底层使用也是setnx,保证了同时只能有一个线程操作 锁住的方法

7.你听说过延时双删吗?为什么不用它呢? 

  • 延迟双删,如果是写操作,我们先把缓存中的数据删除,然后更新 数据库,最后再延时删除缓存中的数据,其中这个延时多久不太好确定,在 延时的过程中可能会出现脏数据,并不能保证强一致性,所以没有采用它。

8.redis做为缓存,数据的持久化是怎么做的?

  • 在Redis中提供了两种数据持久化的方式:1、RDB 2、AOF

注:

  • RDB全称Redis Database Backup file (Redis数据备份文件) ,也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。redis内部有触发RDB的机制,在redis.conf文件中
  • AOF全称为Append Only File (追加文件)。Redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件。AOF默认是关闭的,需要修改redis.conf配置文件来开启AOF

9.这两种持久化方式有什么区别呢? 

  • RDB是一个快照文件,它是把redis内存存储的数据写到磁盘上,当 redis实例宕机恢复数据的时候,方便从RDB的快照文件中恢复数据。
  • AOF的含义是追加文件,当redis操作写命令的时候,都会存储这个文件中, 当redis实例宕机恢复数据的时候,会从这个文件中再次执行一遍命令来恢复数据

10.这两种方式,哪种恢复的比较快呢? 

  • RDB因为是二进制文件,在保存的时候体积也是比较小的,它恢复 的比较快,但是它有可能会丢数据
  • AOF恢复的速度慢一些,但是它丢数据的风险要小很多,在AOF 文件中可以设置刷盘策略

11.Redis的数据过期策略有哪些 ?

  • 1.惰性删除,在设置该key过期时间后,我们不去管它,当需要该key 时,我们在检查其是否过期,如果过期,我们就删掉它,反之返回该key。
  • 2.定期删除,就是说每隔一段时间,我们就对一些key进行检查,删除里面过期的key

Redis的过期删除策略:惰性删除 + 定期删除两种策略进行配合使用。

12.Redis的数据淘汰策略有哪些 ?

  1. noeviction:不淘汰任何key,但是内存满时不允许写入新数据,默认就是这种策略
  2. volatile-ttl:对设置了TTL的key,比较key的剩余TTL值,TTL越小越先被淘汰
  3. allkeys-random:对全体key,随机进行淘汰。
  4. volatile-random:对设置了TTL的key,随机进行淘汰。
  5. allkeys-Iru:对全体key,基于LRU算法进行淘汰
  6. volatile-Iru:对设置了TTL的key,基于LRU算法进行淘汰
  7. allkeys-lfu:对全体key,基于LFU算法进行淘汰
  8. volatile-lfu:对设置了TTL的key,基于LFU算法进行淘汰

注:

  • LRU的意思就是最少最近使用,用当前时间减去最后一次访问时间,这个值 越大则淘汰优先级越高。
  • LFU的意思是最少频率使用。会统计每个key的访问频率,值越小淘汰优先级 越高

13.数据库有1000万数据 ,Redis只能缓存20w数据, 如何保证Redis中的数据都是热点数据 ?

  • 使用allkeys-Iru(挑选最近最少使用的数据淘汰)淘汰策略,留下来的都是经常访问的热点数据

14.Redis的内存用完了会发生什么?

  • 这个要看redis的数据淘汰策略是什么,如果是默认的配置,redis内存 用完以后则直接报错。我们当时设置的 allkeys-lru 策略。把最近最常访问的 数据留在缓存中。

15.Redis分布式锁如何实现 ?

  • 在redis中提供了一个命令setnx(SET if not exists) 由于redis的单线程的,用了命令之后,只能有一个客户端对某一个key设置值,在没有过期或删除key的时候是其他客户端是不能设置这个key的

16.如何控制Redis实现分布式锁有效时长呢?

  • 采用的 redis的一个框架redisson实现的。在redisson中需要手动加锁,并且可以控制锁的失效时间和等待时间,当锁 住的一个业务还没有执行完成的时候,在redisson中引入了一个看门狗机 制,就是说每隔一段时间就检查当前业务是否还持有锁,如果持有就增加加 锁的持有时间,当业务执行完成之后需要使用释放锁就可以了
  • 在高并发下,一个业务有可能会执行很快,先客户1持 有锁的时候,客户2来了以后并不会马上拒绝,它会自旋不断尝试获取锁,如果客户1释放之后,客户2就可以马上持有锁,性能也得到了提升。

17.redisson实现的分布式锁是可重入的吗?

  • 是可以重入的。
  • 这样做是为了避免死锁的产生。
  • 这个重入其实 在内部就是判断是否是当前线程持有的锁,如果是当前线程持有的锁就会计 数,如果释放锁就会在计算上减一。
  • 在存储数据的时候采用的hash结构,大 key可以按照自己的业务进行定制,其中小key是当前线程的唯一标识,value 是当前线程重入的次数

18.Redis集群有哪些方案, 知道吗 ? 

  • 在Redis中提供的集群方案总共有三种:主从复制、哨兵模式、Redis分片集群

19.介绍一下主从同步

  • 单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。一般都是一主多从,主节点负责写数据,从节点负责读数据

20.主从同步数据的流程?

主从同步分为了两个阶段,一个是全量同步,一个是增量同步

全量同步:

  • 1.从节点请求主节点同步数据(replication id, offset )
  • 2.主节点判断是否是第一次请求,是第一次就与从节点同步版本信息(replication id和offset)
  • 3.主节点执行bgsave,生成rdb文件后,发送给从节点去执行
  • 4在rdb生成执行期间,主节点会以命令的方式记录到缓冲区(一个日志文件)

增量同步:

  • 1.从节点请求主节点同步数据,主节点判断不是第一次请求,不是第一次就获取从节点的offset值
  • 2.主节点从命令日志中获取offset值之后的数据,发送给从节点进行数据同步

21.怎么保证Redis的高并发高可用?

  • 首先可以搭建主从集群,再加上使用redis中的哨兵模式,哨兵模式 可以实现主从集群的自动故障恢复,里面就包含了对主从服务的监控、自动 故障恢复、通知;如果master故障,Sentinel会将一个slave提升为master。
  • 当故障实例恢复后也以新的master为主;同时Sentinel也充当Redis客户端的 服务发现来源,当集群发生故障转移时,会将最新信息推送给Redis的客户 端,所以一般项目都会采用哨兵的模式来保证redis的高并发高可用

22.你们使用redis是单点还是集群,哪种集群?

  • 我们当时使用的是主从(1主1从)加哨兵。一般单节点不超 过10G内存,如果Redis内存不足则可以给不同服务分配独立的Redis主从节点。

23.redis的分片集群有什么作用

  • 分片集群主要解决的是,海量数据存储的问题,集群中有多个 master,每个master保存不同数据,并且还可以给每个master设置多个slave节点,就可以继续增大集群的高并发能力。

 24.Redis分片集群中数据是怎么存储和读取的?

  • Redis 集群引入了哈希槽的概念,有 16384 个哈希槽,集群中每个主节点绑 定了一定范围的哈希槽范围, key通过 CRC16 校验后对 16384 取模来决定放置哪个槽,通过槽找到对应的节点进行存储。

25.Redis是单线程的,但是为什么还那么快? 

  • Redis是纯内存操作,执行速度非常快
  • 采用单线程,避免不必要的上下文切换可竞争条件,多线程还要考虑线程安全问题
  • 使用1/0多路复用模型,非阻塞
  • Redis是纯内存操作,执行速度非常快,它的性能瓶颈是网络延迟而不是执行速度, 1/0多路复用模型主要就是实现了高效的网络请求

26.能解释一下I/O多路复用模型?

  • 指利用单个线程来同时监听多个Socket,并在某个Socket可读、可写时得到通知,从而避免无效的等待,充分禾用CPU资源。
  • 目前的i/O多路复用都是采用的epoll模式实现,它会在通知用户进程Socket就绪的同时,把已就绪的Socket写入用户空间,不需要挨个遍历Socket来判断是否就绪,提升了性能。

27.五种常用的数据类型? 

  • 1、String:String是最常用的一种数据类型,普通的key- value 存储都可以归为此类。其中Value既可以是数字也可以是字符串。使用场景:常规key-value缓存应用。常规计数: 微博数, 粉丝数。
  • 2、Hash:Hash 是一个键值(key => value)对集合。Redishash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值。
  • 3、Set:Set是一个无序的天然去重的集合,即Key-Set。此外还提供了交集、并集等一系列直接操作集合的方法,对于求共同好友、共同关注什么的功能实现特别方便。
  • 4、List:List是一个有序可重复的集合,其遵循FIFO的原则,底层是依赖双向链表实现的,因此支持正向、反向双重查找。通过List,我们可以很方面的获得类似于最新回复这类的功能实现。
  • 5、SortedSet:类似于java中的TreeSet,是Set的可排序版。此外还支持优先级排序,维护了一个score的参数来实现。适用于排行榜和带权重的消息队列等场景。

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

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

相关文章

【论文阅读】(2024.03.05-2024.03.15)论文阅读简单记录和汇总

(2024.03.05-2024.03.15)论文阅读简单记录和汇总 2024/03/05:随便简单写写,以后不会把太详细的记录在CSDN,有道的Markdown又感觉不好用。 目录 (ICMM 2024)Quality Scalable Video Coding Based on Neural Represent…

Linux之线程概念

目录 一、细粒度划分 1、堆区细粒度划分 2、物理内存和可执行程序细粒度划分 3、虚拟地址到物理地址的转化 二、线程的概念 1、基本概念 2、线程的优点 3、线程的缺点 4、线程异常 5、线程用途 三、Linux下的进程和线程 一、细粒度划分 1、堆区细粒度划分 在语言…

OS-Copilot:实现具有自我完善能力的通用计算机智能体

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ AI 缩小了人类间的知识和技术差距 论文标题:OS-Copilot: Towards Generalist Computer Agents with Self-Improvement 论文链接:https://arxiv.org/abs/2402.07456 项目主页&a…

目标网站屏蔽右键检查(使用开发者工具)

问题: 通过网络触手中想要获取某网站的数据出现:鼠标右击,或按ctrl F10 键 无反应(也就是打不开类似谷歌的开发工具) 问题同等与: 解决网页屏蔽F12或右键打开审查元素 引用: 作者&#xff…

学会玩游戏,智能究竟从何而来?

最近在读梅拉妮米歇尔《AI 3.0》第三部分第九章,谈到学会玩游戏,智能究竟从何而来? 作者: [美] 梅拉妮米歇尔 出版社: 四川科学技术出版社湛庐 原作名: Artificial Intelligence: A Guide for Thinking Humans 译者: 王飞跃 / 李玉珂 / 王晓…

基于jsp+mysql+Spring+mybatis的SSM汽车保险理赔管理系统设计和实现

基于jspmysqlSpringmybatis的SSM汽车保险理赔管理系统设计和实现 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐…

图片在div完全显示

效果图&#xff1a; html代码&#xff1a; <div class"container" style" display: flex;width: 550px;height: 180px;"><div class"box" style" color: red; background-color:blue; width: 50%;"></div><div …

服务器与文件内数据的 LENGTH_IN_CHAR 参数不匹配

导入数据库数据的时候出现这个 怎么解决&#xff1a;重建数据库实例 下面是达梦的工具 使用DM数据库配置助手 新建、删除实例 新建实例时的配置需要注意的选项 主要是字符集、大小写、和VARCHAR类型以字符为单位 出现【LENGTH_IN_CHAR 参数不匹配】勾选【VARCHAR类型以字…

JVM运行时数据区——对象的实例化内存布局与访问定位

文章目录 1、对象的实例化1.1、创建对象的方式1.2、创建对象的步骤 2、对象的内存布局3、对象的访问定位3.1、对象访问的定位方式3.2、使用句柄访问3.3、使用指针访问 4、小结 平时大家经常使用new关键字来创建对象&#xff0c;那么我们创建对象的时候&#xff0c;怎么去和运行…

【R语言爬虫实战】抓取省市级城市常务会议内容

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…

在vue3中使用el-tree-select做一个树形下拉选择器

el-tree-select是一个含有下拉菜单的树形选择器&#xff0c;结合了 el-tree 和 el-select 两个组件的功能。 因为包含了el-tree的功能&#xff0c;我们可以自定义tree的节点&#xff0c;创造出想要的组件 使用default插槽可以自定义节点内容&#xff0c;它的default插槽相当于…

基于美洲狮优化算法(Puma Optimizar Algorithm ,POA)的无人机三维路径规划(提供MATLAB代码)

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化飞行…

STM32之串口中断接收UART_Start_Receive_IT

网上搜索了好多&#xff0c;都是说主函数增加UART_Receive_IT()函数来着&#xff0c;实际正确的是UART_Start_Receive_IT()函数。 —————————————————— 参考时间&#xff1a;2024年3月9日 Cube版本&#xff1a;STM32CubeMX 6.8.1版本 参考芯片&#xff1a…

【AI视野·今日Robot 机器人论文速览 第八十三期】Wed, 6 Mar 2024

AI视野今日CS.Robotics 机器人学论文速览 Wed, 6 Mar 2024 Totally 30 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;SpaceHopper,外星探索多功能三足机器人 (from Robotic Systems Lab, ETH Zurich) Daily Robotics Papers A Safety-Criti…

UnicodeDecodeError: ‘gbk‘和Error: Command ‘pip install ‘pycocotools>=2.0

今天重新弄YOLOv5的时候发现不能用了&#xff0c;刚开始给我报这个错误 subprocess.CalledProcessError: Command ‘pip install ‘pycocotools&#xff1e;2.0‘‘ returned non-zero exit statu 说这个包安装不了 根据他的指令pip install ‘pycocotools&#xff1e;2.0这个根…

CAS 登出方案

1.配置 CAS 服务器端 添加配置cas.logout.followServiceRedirects:true&#xff0c;使支持 CAS 退出时支持输入 service 参数为跳转路径 2.配置客户端服务,添加session清除操作 3.前端文件添加跳转重定向 1) 直接在客户端调用http请求/cas/logout去注销不能携带cookie信息, 无…

RocketMQ架构详解

文章目录 概述RocketMQ架构rocketmq的工作流程Broker 高可用集群刷盘策略 概述 RocketMQ一个纯java、分布式、队列模型的开源消息中间件&#xff0c;前身是MetaQ&#xff0c;是阿里研发的一个队列模型的消息中间件&#xff0c;后开源给apache基金会成为了apache的顶级开源项目…

提高驾驶安全性 | 基于ACM32 MCU的胎压监测仪方案

概述 胎压监测系统 作为车辆的基础部件&#xff0c;轮胎是影响行车安全不可忽视的因素之一。据统计&#xff0c;中国每年由胎压问题引起轮胎爆炸的交通事故约占 30%&#xff0c;其中 50%的高速交通事故是由车辆胎压异常引起。因此&#xff0c;准确实时地监测车辆在行驶过程中…

部署LVS负载均衡集群架构

目录 一、ipvsadm 工具 二、NAT模式下部署LVS负载均衡 1、部署NFS共享存储服务器 1.1 安装NFS软件 1.2 新建共享目录和站点文件 1.3 设置共享策略 2、部署节点服务器1 2.1 安装并启动nginx软件 2.2 挂载共享目录到网页站点目录 2.3 修改网关 3、部署节点服务器2 3.…

Swift 入门学习:集合(Collection)类型趣谈-下

概览 集合的概念在任何编程语言中都占有重要的位置&#xff0c;正所谓&#xff1a;“古来聚散地&#xff0c;宿昔长荆棘&#xff1b;游人聚散中&#xff0c;一片湖光里”。把那一片片、一瓣瓣、一粒粒“可耐”的小精灵全部收拢、吸纳的井然有序、条条有理&#xff0c;怎能不让…