位置: IT常识 - 正文

Redis 被问麻了...(redis常见问题解决)

编辑:rootadmin
Redis 被问麻了...

推荐整理分享Redis 被问麻了...(redis常见问题解决),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:redis遇到的问题,redisdao,redis常见问题解决,redis被攻击,redis quene,redis quene,redis quene,redis quene,内容如对您有帮助,希望把文章链接给更多的朋友!

Redis是面试中绕不过的槛,只要在简历中写了用过Redis,肯定逃不过。今天我们就来模拟一下面试官在Redis这个话题上是如何一步一步深入,全面考察候选人对于Redis的掌握情况。

小张:

面试官,你好。我是来参加面试的。

面试官:

你好,小张。我看了你的简历,熟练掌握Redis,那么我就随便问你几个Redis相关的问题吧。首先我的问题是,Redis是单线程还是多线程呢?

小张:

Redis不同版本之间采用的线程模型是不一样的,在Redis4.0版本之前使用的是单线程模型,在4.0版本之后增加了多线程的支持。

在4.0之前虽然我们说Redis是单线程,也只是说它的网络I/O线程以及Set 和 Get操作是由一个线程完成的。但是Redis的持久化、集群同步还是使用其他线程来完成。

4.0之后添加了多线程的支持,主要是体现在大数据的异步删除功能上,例如 unlink key、flushdb async、flushall async 等

面试官:

回答的很好,那为什么Redis在4.0之前会选择使用单线程?而且使用单线程还那么快?

小张:

选择单线程个人觉得主要是使用简单,不存在锁竞争,可以在无锁的情况下完成所有操作,不存在死锁和线程切换带来的性能和时间上的开销,但同时单线程也不能完全发挥出多核CPU的性能。

至于为什么单线程那么快我觉得主要有以下几个原因:

Redis 的大部分操作都在内存中完成,内存中的执行效率本身就很快,并且采用了高效的数据结构,比如哈希表和跳表。

使用单线程避免了多线程的竞争,省去了多线程切换带来的时间和性能开销,并且不会出现死锁。

采用 I/O 多路复用机制处理大量客户端的Socket请求,因为这是基于非阻塞的 I/O 模型,这就让Redis可以高效地进行网络通信,I/O的读写流程也不再阻塞。

面试官:

不错,那Redis是如何实现数据不丢失的呢?

小张:

Redis数据是存储在内存中的,为了保证Redis数据不丢失,那就要把数据从内存存储到磁盘上,以便在服务器重启后还能够从磁盘中恢复原有数据,这就是Redis的数据持久化。Redis数据持久化有三种方式。

AOF 日志(Append Only File,文件追加方式):记录所有的操作命令,并以文本的形式追加到文件中。

RDB 快照(Redis DataBase):将某一个时刻的内存数据,以二进制的方式写入磁盘。

混合持久化方式:Redis 4.0 新增了混合持久化的方式,集成了 RDB 和 AOF 的优点。

面试官:

那你分别说说 AOF和 RDB的实现原理吧。

小张:

AOF采用的是写后日志的方式,Redis先执行命令把数据写入内存,然后再记录日志到文件中。AOF日志记录的是操作命令,不是实际的数据,如果采用AOF方法做故障恢复时需要将全量日志都执行一遍。

RDB采用的是内存快照的方式,它记录的是某一时刻的数据,而不是操作,所以采用RDB方法做故障恢复时只需要直接把RDB文件读入内存即可,实现快速恢复。

面试官:

你刚提到了AOF采用的是 “写后日志” 的方式,我们平时用的MySQL则采用的是 “写前日志”,那 Redis为什么要先执行命令,再把数据写入日志呢?

小张:额头开始冒汗,问的是些啥问题呀。。。

额,这个主要是由于Redis在写入日志之前,不对命令进行语法检查,所以只记录执行成功的命令,避免出现记录错误命令的情况,而且在命令执行后再写日志不会阻塞当前的写操作。

面试官:

那 后写日志又有什么风险呢?

小张:

我... 这个我不会。

面试官:

好吧,后写日志主要有两个风险可能会发生:

数据可能会丢失:如果 Redis 刚执行完命令,此时发生故障宕机,会导致这条命令存在丢失的风险。

可能阻塞其他操作:AOF 日志其实也是在主线程中执行,所以当 Redis 把日志文件写入磁盘的时候,还是会阻塞后续的操作无法执行。

我还有个问题是 RDB做快照时会阻塞线程吗?

Redis 被问麻了...(redis常见问题解决)

小张:

Redis 提供了两个命令来生成 RDB 快照文件,分别是 save 和 bgsave。save 命令在主线程中执行,会导致阻塞。而 bgsave 命令则会创建一个子进程,用于写入 RDB 文件的操作,避免了对主线程的阻塞,这也是 Redis RDB 的默认配置。

面试官:

RDB 做快照的时候数据能修改吗?

小张:

save是同步的会阻塞客户端命令,bgsave的时候是可以修改的。

面试官:

那Redis是怎么解决在bgsave做快照的时候允许数据修改呢?

小张:(你咋还问。。。我™不会啊!)

额,这个我不太清楚...

面试官:

这里主要是利用bgsave的子线程实现的,具体操作如下:

如果主线程执行读操作,则主线程和 bgsave 子进程互相不影响;

如果主线程执行写操作,则被修改的数据会复制一份副本,然后 bgsave子进程会把该副本数据写入 RDB 文件,在这个过程中,主线程仍然可以直接修改原来的数据。

要注意,Redis 对 RDB 的执行频率非常重要,因为这会影响快照数据的完整性以及 Redis 的稳定性,所以在 Redis 4.0 后,增加了 AOF 和 RDB 混合的数据持久化机制: 把数据以 RDB 的方式写入文件,再将后续的操作命令以 AOF 的格式存入文件,既保证了 Redis 重启速度,又降低数据丢失风险。

小张:

学到了学到了。

面试官:

那你再跟我说说Redis如何实现高可用吧?

小张:

Redis实现高可用主要有三种方式:主从复制、哨兵模式,以及 Redis 集群。

主从复制

将从前的一台 Redis 服务器,同步数据到多台从 Redis 服务器上,即一主多从的模式,这个跟MySQL主从复制的原理一样。

哨兵模式

使用 Redis 主从服务的时候,会有一个问题,就是当 Redis 的主从服务器出现故障宕机时,需要手动进行恢复,为了解决这个问题,Redis 增加了哨兵模式(因为哨兵模式做到了可以监控主从服务器,并且提供自动容灾恢复的功能)。

Redis Cluster(集群)

Redis Cluster 是一种分布式去中心化的运行模式,是在 Redis 3.0 版本中推出的 Redis 集群方案,它将数据分布在不同的服务器上,以此来降低系统对单主节点的依赖,从而提高 Redis 服务的读写性能。

面试官:

使用哨兵模式在数据上有副本数据做保证,在可用性上又有哨兵监控,一旦master宕机会选举salve节点为master节点,这种已经满足了我们的生产环境需要,那为什么还需要使用集群模式呢?

小张:

额,哨兵模式归根节点还是主从模式,在主从模式下我们可以通过增加salve节点来扩展读并发能力,但是没办法扩展写能力和存储能力,存储能力只能是master节点能够承载的上限。所以为了扩展写能力和存储能力,我们就需要引入集群模式。

面试官:

集群中那么多Master节点,redis cluster在存储的时候如何确定选择哪个节点呢?

小张:

这应该是使用了某种hash算法,但是我不太清楚。。。

面试官:

那好,今天的面试就到这里吧,你先回去等我们的面试通知。

小张:

好的,谢谢面试官,你能告诉我redis cluster怎么实现节点选择的吗?

面试官:

Redis Cluster采用的是类一致性哈希算法实现节点选择的,至于什么是一致性哈希算法你自己回去看看。

Redis Cluster将自己分成了16384个Slot(槽位),哈希槽类似于数据分区,每个键值对都会根据它的 key,被映射到一个哈希槽中,具体执行过程分为两大步。

根据键值对的 key,按照 CRC16 算法计算一个 16 bit 的值。

再用 16bit 值对 16384 取模,得到 0~16383 范围内的模数,每个模数代表一个相应编号的哈希槽。

每个Redis节点负责处理一部分槽位,加入你有三个master节点 ABC,每个节点负责的槽位如下:

节点处理槽位A0-5000B5001 - 10000C10001 - 16383

这样就实现了cluster节点的选择。

本文链接地址:https://www.jiuchutong.com/zhishi/299975.html 转载请保留说明!

上一篇:5个前端练手项目(html css js canvas)(哪里能找到前端练手项目教程)

下一篇:jeesite 定时任务 或者springboot 执行定时任务(定时任务java)

  • 电脑蓝屏的解决方法(电脑蓝屏的解决方法)(电脑蓝屏的解决办法)

    电脑蓝屏的解决方法(电脑蓝屏的解决方法)(电脑蓝屏的解决办法)

  • 华为noh-an01是什么型号(华为noh an00是什么意思)

    华为noh-an01是什么型号(华为noh an00是什么意思)

  • oppo手机微信红包提醒如何设置(oppo手机微信红包提示音在哪里设置)

    oppo手机微信红包提醒如何设置(oppo手机微信红包提示音在哪里设置)

  • python命名规则(以下不符合python命名规则)

    python命名规则(以下不符合python命名规则)

  • airpods的触摸在哪里(airpods的触碰)

    airpods的触摸在哪里(airpods的触碰)

  • ipadpro2020怎么截屏(ipadpro 2021怎么截图)

    ipadpro2020怎么截屏(ipadpro 2021怎么截图)

  • s20怎么截屏(s20截图快捷键设置)

    s20怎么截屏(s20截图快捷键设置)

  • 电脑待机一晚上可以吗(电脑待机一晚上没事吧)

    电脑待机一晚上可以吗(电脑待机一晚上没事吧)

  • 苹果手机测量长度的功能在哪里(苹果手机测量长度功能)

    苹果手机测量长度的功能在哪里(苹果手机测量长度功能)

  • 8p屏幕左上角有黑影会扩大吗(8p屏幕左上角有涨开了)

    8p屏幕左上角有黑影会扩大吗(8p屏幕左上角有涨开了)

  • 打印图片时提示可用内存不足(打印图片时提示出现一个内部错误)

    打印图片时提示可用内存不足(打印图片时提示出现一个内部错误)

  • 蓝牙耳机用什么充电器充电(蓝牙耳机用什么传递信息)

    蓝牙耳机用什么充电器充电(蓝牙耳机用什么传递信息)

  • 数据透视表字段名无效什么意思(数据透视表字段名无效怎么解决)

    数据透视表字段名无效什么意思(数据透视表字段名无效怎么解决)

  • 怎么设置艺术字形状样式(怎么设置艺术字区域高度和宽度)

    怎么设置艺术字形状样式(怎么设置艺术字区域高度和宽度)

  • 朋友圈视频没声音怎么回事(朋友圈视频没声音了怎么回事)

    朋友圈视频没声音怎么回事(朋友圈视频没声音了怎么回事)

  • 苹果手机本机号码储存不了(苹果手机本机号码)

    苹果手机本机号码储存不了(苹果手机本机号码)

  • 怎么去掉word修订模式(怎么去掉word修订红线)

    怎么去掉word修订模式(怎么去掉word修订红线)

  • 抖音抢镜怎么调声音(抖音抢镜在哪里抢镜怎么缩小)

    抖音抢镜怎么调声音(抖音抢镜在哪里抢镜怎么缩小)

  • 荣耀20带指纹解锁吗(荣耀20i指纹)

    荣耀20带指纹解锁吗(荣耀20i指纹)

  • lte中 pdsch的作用(lte pdcch)

    lte中 pdsch的作用(lte pdcch)

  • 朋友圈封面下面的文字怎么设置(朋友圈封面下面的文字怎么添加)

    朋友圈封面下面的文字怎么设置(朋友圈封面下面的文字怎么添加)

  • iphone11能无线充电吗(苹果11能无线充电不)

    iphone11能无线充电吗(苹果11能无线充电不)

  • 智联招聘PK前程无忧(智联招聘比前程无忧工资高)

    智联招聘PK前程无忧(智联招聘比前程无忧工资高)

  • 拼多多怎么把推荐关了(拼多多怎么把推荐里的东西格式化)

    拼多多怎么把推荐关了(拼多多怎么把推荐里的东西格式化)

  • qq小船是单向的吗(qq小船是双向的吗)

    qq小船是单向的吗(qq小船是双向的吗)

  • 手机号丢了可以补办吗(手机号丢了可以登录微信吗)

    手机号丢了可以补办吗(手机号丢了可以登录微信吗)

  • 你需要权限来执行此操作删除不了(你需要权限来执行操作是怎么回事)

    你需要权限来执行此操作删除不了(你需要权限来执行操作是怎么回事)

  • 生产调味料用什么手续
  • 境外承包工程项下资金
  • 购销金额多少的情况下必须需要签合同?
  • 印花税是根据销售额提吗
  • 公司费用计入什么科目
  • 代缴五险一金自己还需要缴纳吗
  • 冲红重开发票增值税怎么处理
  • 一般纳税人怎么转小规模
  • 城建税免征怎么记账
  • 挂靠的项目税务局怎么交地税?
  • 行政事业单位2014年前已交社保费
  • 个体户经营所得怎么申报
  • 递延所得税资产怎么计算
  • 个税和实发不一样
  • 支付宝对公账户还款清零要多久
  • 一般纳税人收到专票怎么做分录
  • 发票打偏了是否罚款
  • 购买法下购买成本包括
  • 研发费用发票怎么入账
  • 应交税费重分类分录
  • 场地维修属于什么费用
  • mac系统怎么设置字体大小
  • 华为系统设置权限
  • 对外投资包括哪些投资项目
  • 无形资产的摊销应计入什么科目
  • 制造费用主要包括哪些费用
  • 短期借款帐务处理
  • wordpress用什么语言编写
  • 今日冬至有什么讲究吗
  • 短期贷款利息支出计算
  • 进项税不得抵扣的意思
  • 含工资表的会计科目
  • 计提投资者利润
  • 优先股票与普通股票相比,其优先权主要指
  • yolov5中使用的限制目标宽高的方法防止梯度爆炸
  • vue的简介
  • javascript学什么内容
  • ps调整边缘在哪里快捷键
  • 健身房注册公司名称带超字
  • 资产处置损益怎么结转到本年利润
  • 固定资产清理怎么报税呢
  • 企业印花税怎么入账
  • 一般纳税人暂未开具发票
  • 个人所得税如何缴纳
  • 零税率应税服务出口退税
  • 可供出售金融资产名词解释
  • 员工的交通费发票可以报销嘛
  • 旅行社差额征税全额开票和差额开票
  • 企业代扣税费会计分录
  • 本年利润如何记账
  • 用友软件如何反结账流程
  • 电子承兑非拒付会怎么样
  • 补缴以前年度企业所得税分录怎么写
  • 会计各种凭证的填写示例
  • Mysql 5.6.37 winx64安装双版本mysql笔记记录
  • winxp使用到什么时候
  • ubuntu的命令行快捷键
  • ubuntu 18.04网络连接
  • macos finder的应用程序列表在哪里
  • svchoost.exe - svchoost是什么进程 有什么作用
  • linux lsof命令详解
  • win7系统显卡驱动在哪个文件夹
  • win7怎么删除wifi已连接过的网络
  • JavaScript的setter与getter方法
  • android webview获取文本
  • 禁止指定qq号登录怎么弄
  • js获取弹窗的元素
  • centos创建shell脚本
  • asp.net mvc view
  • js跨域请求有哪些方式
  • 键盘事件有三个 分别是
  • flash谈广告
  • android 发短信
  • 广州契税补贴2022政策
  • 国家河北税务局官网
  • 河南省地方税务局公告2017年第4号
  • 分支机构如何变更为独立纳税人?
  • 残疾人在国企有补贴吗
  • 差额开票扣除额多补税
  • 保税区社会车辆能进吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设