redis 面试问题 (更新中 ing)
目录
- reids 是做什么的
- 为什么那么快
- 有哪些使用场景
- redis有哪些 数据结构
- redis 有哪些底层数据结构
- 为什么设计 sds
- 一个 字符串 存储多大容量
- stream
- 为什么设计 stream
- stream 消费者消息丢失
- stream 消息私信问题
- 持久化机制
- redis 持久化机制,优缺点,怎么用
- rdb 又是怎么触发的呢
- rdb 期间 ,内存很大,如果有写操作,如何保证数据一致性
- 主进程 fork 子进程如何复制数据
- 那么 rdb 期间,服务崩溃怎么办
- 那么 aof 如何实现呢
- 什么是 aof 重写
- aof 重写时,主线程有哪些地方会被阻塞
- aof 重写时,有新数据写入 怎么办?
- 主从模式
- redis 什么是主从,为什么需要主从
- 主服务器数据怎么复制到从服务器,什么 是全量 复制
- 为什么增加增量复制
- repl_backlog_buffer 环形缓冲区满了怎么办
reids 是做什么的
为什么那么快
有哪些使用场景
1.数据缓存
2.计数器
3.限时
4.限流
5.分布式锁
6.队列
7.发布 订阅
redis有哪些 数据结构
常用的
- string 对字符串 、整数、浮点数
- list 链表 ,字符串
- set 不重复集合 ,交集、并集 差集
- hash 无序散列
- zset 不重复 分数排序 排行榜
特殊的 - 基数统计 hyperloglogs
- 位图 bitmaps
- 地理位置 geo
redis 有哪些底层数据结构
- sds 动态字符串
- quicklist 快表
- ziplist
- inset
- dict
- skiplist
为什么设计 sds
- 常数复杂度获取字符串长度
- 杜绝缓冲区溢出,先判断长度
- 减少内存分配 次数,预分配,惰性释放空间
- 兼容部分 c 函数
- 二进制安全 ,图片,空字符,特殊符号 存储 ,判断结束
一个 字符串 存储多大容量
- 512m
stream
为什么设计 stream
redis 支持发布订阅功能,但是有缺陷
- list和 zet ,支持持久化,不支持主播、多播
- pub、sub,不支持持久化,dwon 机消息丢失,
参考 kafka,设计了 stream,支持消息回溯,消费者组
stream 消费者消息丢失
- 对于组内消费者消费消息,现记录读取位置,消费完,回复 ack,记录消息过,如果消费者宕机,可以调用查询 pengding 列表,读取已经 读取未成功消费的消息
stream 消息私信问题
- 对于反复失败的 消息,redis 会记录失败次数,达到一定次数 ,会打标记,消费者查询该标记,可以决定 是删除 还是怎么 处理
持久化机制
redis 持久化机制,优缺点,怎么用
主要采用两种方式
- 存量复制,采用 rdb 持久化,对已经存在的大量数据拍快照, 速度快,耗内存大
- 增量复制,如果只采用 rdb,redis 数据每次写入,都要实时持久化吗,不合适,所以有了 aof 日志,可以把 redis 命令通过文本 方式实时的追加到文件中
- redis 4.0 采用混合模式 ,rdb 定时执行,期间的命令,采用 aof 追加,这样既避免了 fork 子进程对内存 的影响,有可以记录所有 的命令
rdb 又是怎么触发的呢
- 手动触发
- save 命令,主进程执行,会阻塞客户端,生产环境禁止使用
- bgsave 命令,新版 redis 推出,fork 一个子进程,后台 执行,阻塞只发生在 fork 阶段,其他没事
- 自动触发
- 配置文件配置 save m 秒 n 次
- 主从复制,从节点 执行全量复制时
- 执行shutdown 命令,没有开启 aof 时,也会进行
- 执行 debug reload 命令,重新加载 redis 触发
rdb 期间 ,内存很大,如果有写操作,如何保证数据一致性
- rdb 采用 copy-on-write,通过 fork 一个子进程进行,假设 t0redis 启动 t1 执行 rdb 命令 ,rdb 先 fork 一个主进程备份 t0-t1 期间的数据,假设备份 完成时间 t2,那么 t1-t2 期间数据怎么办?
- rdb 期间,redis 会 提供一个内存缓冲期,t1-t2 期间的都copy 一份副本,写入这个缓冲区 ,带 rdb 完后,同步回去
主进程 fork 子进程如何复制数据
- fork 命令有 操作系统提供,不会复制 一份内存,只会复制 虚拟页表的对应关系,会耗费 cpu resource
- 当客户端读取数据,直接读取主进程数据
- 当客户端写入数据,会 copy 一份副本 出来
那么 rdb 期间,服务崩溃怎么办
- rdb 是定时执行的,redis 会存储最近的 rdb 快照,如果最新的一次崩溃, 这次 rdb 就不算 成功,那么重启 redis,就会使用上一次成功的 rdb 快照恢复
- 期间数据会丢失部分
既然数据会丢失,可以每 s 一次吗 - 非常不建议,这样很耗费资源
- fork 子进程耗费 cpu 和内存,多次 bgsave,会阻塞主进程
- 备份多个,耗费磁盘
- 建议采用 aof 和 rdb 结合的方式
那么 aof 如何实现呢
- aof 日志是记录redis 的每个写命令,每次 redis 命令写入成功后,都会发送到一个缓冲区 aof_buf,redis 会读取缓冲 取,把命令 写入文件中
- 文件写入和追加时间 ,什么时候会把 aof_buf 写入 aof 文件呢
什么是 aof 重写
aof 一直追加,时间久了文件 会很大,redis 为了优化这个问题,推出了 aof 重写
- redis 会创建一个 新的文件,redis 数据库的数据,采用命令的方式,重新写入 aof 文件中,写完后,替换之前的 aof 文件
- 这样合并去除了之前的多次 add del 命令,减少了容量
aof 重写时,主线程有哪些地方会被阻塞
- fork 子进程,需要复制虚拟页表
- 有 bigkey 写入,需要 copy 一份副本
- aof 写入完成,主进程 append aof buffer 数据时
aof 怎么触发呢 - 2 个配置
- auto-aof-rewrite-min-size:表示运行AOF重写时文件的最小大小,默认为64MB。
- auto-aof-rewrite-percentage:这个值的计算方式是,当前aof文件大小和上一次重写后aof文件大小的差值,再除以上一次重写后aof文件大小。也就是当前aof文件比上一次重写后aof文件的增量大小,和上一次重写后aof文件大小的比值。
aof 重写时,有新数据写入 怎么办?
- 总结为 一个拷贝,2 出日志 , 在重新时,会 fork 子进程, 主进程会把命令 记录到 2 个 aof 缓冲区
- bgrewriteaof 重新完成后 ,会通知主进程,主进程会把 aof 缓冲区命令追加到新的 aof 日志文件后面
- 完成,采用重命名方式替换
主从模式
redis 什么是主从,为什么需要主从
- 一般 redis 只有一台节点提供服务,也就是单机 redis,主从最简单的来说就是2台redis服务器,一个台作为主服务器,一台作为从服务器,从服务器同步主服务器的所有数据
- 可以提供
- 数据冗余:多保存一份数据
- 故障恢复:2台机器都有数据,一台有问题,可以切换另一台提供服务
- 负载均衡:一台提供读写,从服务器提供 °,减轻主服务器压力
- 高可用的基础: 主从自动切换的哨兵模式和 redis cluter 都需要主从为基础
主服务器数据怎么复制到从服务器,什么 是全量 复制
复制方式一共有 2 中,2.8之前全量复制
全量复制的过程
- 建立连接,从服务器执行psync ? 1命令 ,包含主库的 runid 和自己的复制 offset 进度,第一次都不知道,传递?和- ,
- 主库收到后,回复fullresync runid offset ,告诉 自己的 runid 和自己的复制进度,
- 主库开始进行 bgsave生成 rdb 文件,发给从库,同时把这期间的命令存储 到 repl buffer 中
- 从库收到 rdb,清库自己的数据,加载 rdb
- 主动发送 repl buffer,从库执行,完成
为什么增加增量复制
2.8之后,增加增量复制,因为主从网络不稳定,会导致断开连接,每次断开,都会进行全量复制,耗费性能,其实一些步骤不需要全部执行一遍,
redis 提取分析了哪些必须执行的步骤,退出了增量复制功能
看图说话,现说 2 个参数 replication buffer 和 repl_backlog_buffer
- repl_backlog_buffer:是为了从库断开之后,如何找到主从差异数据而设计的环形缓冲区,从而避免全量复制带来的性能开销。如果从库断开时间太久,repl_backlog_buffer环形缓冲区被主库的写命令覆盖了,那么从库连上主库后只能乖乖地进行一次全量复制,所以repl_backlog_buffer配置尽量大一些,可以降低主从断开后全量复制的概率。而在repl_backlog_buffer中找主从差异的数据后,如何发给从库呢?这就用到了replication buffer。
- replication buffer: Redis和客户端通信也好,和从库通信也好,Redis都需要给分配一个 内存buffer进行数据交互,客户端是一个client,从库也是一个client,我们每个client连上Redis后,Redis都会分配一个client buffer,所有数据交互都是通过这个buffer进行的:Redis先把数据写到这个buffer中,然后再把buffer中的数据发到client socket中再通过网络发送出去,这样就完成了数据交互。所以主从在增量同步时,从库作为一个client,也会分配一个buffer,只不过这个buffer专门用来传播用户的写命令到从库,保证主从数据一致,我们通常把它叫做replication buffer。#
repl_backlog_buffer 环形缓冲区满了怎么办
- 如果断开时间过长,从库在主库的repl_backlog_buffer和slave_repl_offset都被覆盖了,只能重新全量复制
- 每个从库的 slave_repl_offset 都不一样,主库会自动判断,是否需要全量复制
相关文章:
redis 面试问题 (更新中 ing)
目录 reids 是做什么的为什么那么快有哪些使用场景redis有哪些 数据结构redis 有哪些底层数据结构为什么设计 sds一个 字符串 存储多大容量 stream为什么设计 streamstream 消费者消息丢失stream 消息私信问题 持久化机制redis 持久化机制,优缺点,怎么用…...
力扣(leetcode)第389题找不同(Python)
389.找不同 题目链接:389.找不同 给定两个字符串 s 和 t ,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。 示例 1: 输入:s “abcd”, t “abcde…...
Linux_源码编译安装LAMP
1. 安装httpd服务 在配置 Apache 网站服务之前,需要正确安装好 httpd 服务器软件。httpd 服务器的安装可以选用 RPM 安装、源码编译安装这两种方式,前者相对比较简单、快速,但是在功能上存在一定的局限性。在实际的生产环境中,使…...
静态网页设计——清雅古筝网(HTML+CSS+JavaScript)
前言 声明:该文章只是做技术分享,若侵权请联系我删除。!! 感谢大佬的视频: https://www.bilibili.com/video/BV1T64y1K7Zn/?vd_source5f425e0074a7f92921f53ab87712357b 使用技术:HTMLCSSJS(…...
实战Flink Java api消费kafka实时数据落盘HDFS
文章目录 1 需求分析2 实验过程2.1 启动服务程序2.2 启动kafka生产 3 Java API 开发3.1 依赖3.2 代码部分 4 实验验证STEP1STEP2STEP3 5 时间窗口 1 需求分析 在Java api中,使用flink本地模式,消费kafka主题,并直接将数据存入hdfs中。 flin…...
爬虫与反爬-localStorage指纹(某易某盾滑块指纹检测)(Hook案例)
概述:本文将用于了解爬虫中localStorage的检测原理以及讲述一个用于检测localStorage的反爬虫案例,最后对该参数进行Hook断点定位 目录: 一、LocalStorage 二、爬虫中localStorage的案例(以某盾滑块为例) 三、如何…...
聊一聊 webpack 和 vite 的开发服务代理的问题
webpack 和 vite webpackVite重新编辑的问题 changOrigin: true如何定义 /api ? webPack And Vite 都是两个比较好用的打包工具,尤其是 Vite, 几几年流行忘记了,特色就是服务启动极快,实现预加载,感觉 webPack 要比 Vite 要复杂一…...
【鸿蒙4.0】安装DevEcoStudio
1.下载安装包 HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者华为鸿蒙DevEco Studio是面向全场景的一站式集成开发环境,,在鸿蒙官网下载或升级操作系统开发工具DevEco Studio最新版本,SDK配置和下载,2.1支持Mac、Windows操作系统。…...
[概率论]四小时不挂猴博士
贝叶斯公式是什么 贝叶斯公式是概率论中的一个重要定理,用于计算在已知一些先验信息的情况下,更新对事件发生概率的估计。贝叶斯公式的表达式如下: P(A|B) P(B|A) * P(A) / P(B) 其中,P(A|B)表示在事件B发生的条件下事件A发生的概…...
算法通关村第二十关-黄金挑战图的常见算法
大家好我是苏麟 , 今天聊聊图的常见算法 . 图里的算法是很多的,这里我们介绍一些常见的图算法。这些算法一般都比较复杂,我们这里介绍这些算法的基本含义,适合面试的时候装*,如果手写,那就不用啦。 图分析算法…...
服务器内存不足怎么办?会有什么影响?
服务器内存,也被称为RAM(Random Access Memory),是一种临时存储设备,用于临时存放正在运行的程序和数据。它是服务器上的超高速存储介质,可以快速读取和写入数据,提供给CPU进行实时计算和操作。…...
GPT实战系列-简单聊聊LangChain
GPT实战系列-简单聊聊LangChain LLM大模型相关文章: GPT实战系列-ChatGLM3本地部署CUDA111080Ti显卡24G实战方案 GPT实战系列-Baichuan2本地化部署实战方案 GPT实战系列-大话LLM大模型训练 GPT实战系列-探究GPT等大模型的文本生成 GPT实战系列-Baichuan2等大模…...
【读书笔记】《白帽子讲web安全》浏览器安全
目录 第二篇 客户端脚本安全 第2章 浏览器安全 2.1同源策略 2.2浏览器沙箱 2.3恶意网址拦截 2.4高速发展的浏览器安全 第二篇 客户端脚本安全 第2章 浏览器安全 近年来随着互联网的发展,人们发现浏览器才是互联网最大的入口,绝大多数用户使用互联…...
海外服务器2核2G/4G/8G和4核8G配置16M公网带宽优惠价格表
腾讯云海外服务器租用优惠价格表,2核2G10M带宽、2核4G12M、2核8G14M、4核8G16M配置可选,可以选择Linux操作系统或Linux系统,相比较Linux服务器价格要更优惠一些,腾讯云服务器网txyfwq.com分享腾讯云国外服务器租用配置报价&#x…...
Linux 编译安装 Nginx
目录 一、前言二、四种安装方式介绍三、本文安装方式:源码安装3.1、安装依赖库3.2、开始安装 Nginx3.3、Nginx 相关操作3.4、把 Nginx 注册成系统服务 四、结尾 一、前言 Nginx 是一款轻量级的 Web 服务器、[反向代理]服务器,由于它的内存占用少…...
Oracle文件自动“减肥”记
📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…...
【csharp】抽象类与接口有哪些不同?什么时候应该使用抽象类?
抽象类与接口有哪些不同? 抽象类和接口是在面向对象编程中两个不同的概念,它们有一些重要的区别。以下是抽象类和接口的主要不同点: 抽象类(Abstract Class): 成员类型: 抽象类可以包含抽象方…...
最新-mybatis-plus 3.5分页插件配置
mybatis-plus 3.5分页插件配置 前提 1.项目不是springboot, 是以前的常规spring项目 2.mp 从3.2升级到3.5,升级后发现原本的分页竟然不起作用了,每次查询都是查出所有 前后配置对比 jar包对比 jsqlparser我这里单独引了包,因为版本太低…...
案例098:基于微信小程序的电子购物系统的设计与实现
文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…...
亚信安慧AntDB数据库:数字化时代的数据库创新引领者
AntDB数据库以其卓越的创新能力,集中体现在融合统一与实时处理两大关键领域。作为一款服务全国超过10亿用户的分布式数据库,其独特之处在于长期积累的经验、多样性的支持能力、快速响应的数据处理速度以及卓越的系统稳定性。AntDB不仅仅是一个数据库系统…...
【MySQL】关于日期转换的方法
力扣题 1、题目地址 1853. 转换日期格式 2、模拟表 表: Days Column NameTypedaydate day 是这个表的主键。 3、要求 给定一个Days表,请你编写SQL查询语句,将Days表中的每一个日期转化为"day_name, month_name day, year"格式的字符串…...
Ubuntu 虚拟机挂接 Windows 目录
Windows 共享目录 首先 Windows 下共享目录 我这里偷懒直接直接 Everyone ,也可以指定用户啥的 Ubuntu 挂接 挂接命令,类似如下: sudo mount -o usernamefananchong,passwordxxxx,uid1000,gid1000,file_mode0644,dir_mode0755,dynperm //…...
机器学习模型可解释性的结果分析
模型的可解释性是机器学习领域的一个重要分支,随着 AI 应用范围的不断扩大,人们越来越不满足于模型的黑盒特性,与此同时,金融、自动驾驶等领域的法律法规也对模型的可解释性提出了更高的要求,在可解释 AI 一文中我们已…...
静态网页设计——环保网(HTML+CSS+JavaScript)(dw、sublime Text、webstorm、HBuilder X)
前言 声明:该文章只是做技术分享,若侵权请联系我删除。!! 感谢大佬的视频: https://www.bilibili.com/video/BV1BC4y1v7ZY/?vd_source5f425e0074a7f92921f53ab87712357b 使用技术:HTMLCSSJS(…...
【HarmonyOS】装饰器下的状态管理与页面路由跳转实现
从今天开始,博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”,对于刚接触这项技术的小伙伴在学习鸿蒙开发之前,有必要先了解一下鸿蒙,从你的角度来讲,你认为什么是鸿蒙呢?它出现的意义又是…...
学习笔记——C++中数据的输入 cin
作用:用于从键盘中获取数据 关键字:cin 语法:cin>>变量 类型:C中数据的输入主要包含:整形(int)浮点型(float,double float),字符型&…...
Filter Options in Select Field
Filter Options in Select Field 假设有两个下拉字段State和City。邦有两个值卡纳塔克邦和马哈拉施特拉邦,城市有四个值,班加罗尔,迈索尔,孟买和浦那。如果希望根据State中选择的值过滤City中的选项,可以编写如下所示的…...
【React系列】Hook(二)高级使用
本文来自#React系列教程:https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. Hook高级使用 1.1. useReducer 很多人看到useReducer的第一反应应该是redux的某个替代品,其实并不是…...
编程笔记 html5cssjs 018 HTML颜色
编程笔记 html5&css&js 018 HTML颜色 一、HTML 颜色二、HTML中设置颜色值三、颜色名称和颜色值 颜色是视觉中重要因素,尤其是处理人机界面中,更是要处理颜色设置和搭配。在网页中,提供了设置颜色的一些方案,需要我们认真学…...
C++_继承
介绍 继承的基本概念 1.共性和个性 (PS:有相同的属性 但是 又有自己的特点) 基类和子类 1. 基类(父类) 共性 2. 子类(派生类) 个性(特点) 继承语法 1.class 子类名:继承方式1 基类1,继承方式2 基类2{ 行为 };继承方式(PS:默认继承方式为:私有继承) 1.公有继承: public 2.保护…...
动态网站建设常用技术不包括/广州seo诊断
本节书摘来自异步社区《Visual Studio程序员箴言》一书中的第2章,第3节,作者: 【美】Sara For,译者: 谢俊 , 更多章节内容可以访问云栖社区“异步社区”公众号查看。 2.3 书签 Visual Studio程序员箴言书签…...
温州做网站seo/建站优化推广
php正则如何不包含某字符串普通的PHP怎么不包含字符串,Php正则化不包含字符串:首先,创建一个PHP样本文件;然后通过正则表达式“preg _ match(/[(ABC)]/s”,$ str,$ arr);”实现判断不包含某个字…...
通州个人做网站/友情手机站
目录: (1)axios-响应格式 (2)axios-拦截器 (3)vue2-条件渲染 (4)vue2-列表渲染 (1)axios-响应格式 下面看axios的返回响应对象的内部组成 后…...
简述设计web站点的一般步骤/鹤壁seo推广
[1].[代码] [Python]代码1.生成随机数02 import random #这个是注释,引入模块03 rnd random.randint(1,500)#生成1-500之间的随机数0405 2.读文件0607 f open("c:\\1.txt","r")08 lines f.readlines()#读取全部内容09 for line in lines10 p…...
常州网站制作公司排名/可以免费推广的平台
今天临时加了个需求,我想着用 Spring 来装载,配合 localcache 这样就能做到无感在 web 启动的时候预先将需要的数据加载到内存中。以便于以后直接拿来使用,不用再次进行加载。 目录 ApplicationContextAware 初始化 实现ApplicationContext…...
学生做爰网站/资源网站优化排名优化
很久没有更新博客了,主要是《线索》的开发,一个小小小的文字游戏,但对于我来说依旧是很艰难的。每天利用下班后的两三个小时,一周五个晚上,持续了一个半月,今天终于将《线索》提交审核了,虽然还…...