建设银行官方招聘网站,什么叫优化,百度小说排行榜前十名,深圳网站设计开发1.说说什么事redis
Redis是一种基于键值对的NoSql数据库。 Redis中的value支持string#xff08;字符串#xff09;、hahs#xff08;哈希#xff09;、list、set、zset#xff08;有序集合#xff09;、bitmaps#xff08;位图#xff09;#xff0c;HyperLoglog等数…1.说说什么事redis
Redis是一种基于键值对的NoSql数据库。 Redis中的value支持string字符串、hahs哈希、list、set、zset有序集合、bitmaps位图HyperLoglog等数据结构
2.redis可以用来干啥 3.Redis的5中数据结构
String类型主要使用场景 缓存功能、计数、共享session、限速hash类型是指键值本身又是一个键值对 使用场景缓存用户信息缓存对象list用来存储多个有序的字符串可以充当栈和队列的角色适用场景消息队列、文章队列set保存多个字符串元素不允许有重复的元素是无序的。场景标签、共同关注sorted set有序集合可以进行排序和使用索引下标的不同它可以给每个元素设置一个权重score作为排序的依据。使用场景用户点赞统计、用户排序bit可以用作签到
4.Redis为什么那么快
单机的Redis可以支撑每秒10几万的并发
完全基于内存操作使用单线程操作避免了线程的切换和竞态产生的消耗基于非阻塞的IO多路复用机制C语言的实现优化过的数据结构基于几种数据结构redis做了大量的优化性能极高
5.Redis6.0使用多线程是怎么回事
Redis6.0的多线程是用多线程来处理数据的读写和协议解析但是Redis执行命令还是单线程的。这样做的目的是因为Redis的性能瓶颈是在IO上而非CPU使用多线程能提升IO读写的效率从而提高整体的Redis 性能
6.Redis的持久化方案
redis持久化分为RDB和AOF两种
RDB持久化是把当前的进程数据生成快照保存到硬盘的过程触发RDB可以分为手动和自动。手动触发分别对应的是save和bgsave命令 save命令阻塞当前redis服务器知道RDB过程结束对应内存较大的实例会阻塞过长的时间线上环境不建议使用。bgsave命令Redis进程执行fork操作创建子进程RDB持久化由子进程负责完成后自动结束阻塞只发生在fork阶段一般时间很短。
以下场景触发自动保存
使用save相关配置如save m n表示m秒内触发n次修改自动触发bgsave。如果从节点执行全量复制操作主节点自动执行bgsave生成RDB文件并发送给从节点执行debugreload命令重新加载redis时候也会自动触发save操作默认情况执行shutdown命令时候如果没有开启AOF持久化功能则自动执行bgsave命令。
AOF AOF持久化:以独立日志的方式记录每次写命令重启时候在重新执行AOF文件中的命令以达到恢复数据的目的。AOF主要作用是解决数据持久化的实时性目前是redis持久化主流方式 AOF工作流程如下命令写入、文件同步、文件重写、重启加载 流程如下
所以写入命令会追加到aof_buf(缓冲器中)。AOF缓冲区根据对应的策略向硬盘做同步操作随着AOF文件越来越大需要定期对AOF文件进行重写达到压缩目的。当Redis重启的时候可以加载AOF文件进行数据恢复
7.RDB和AOF优缺点
RDB优点 优点|1.只有一个紧凑的二进制文件dump.rdb非常时候全量复制备份的场景 2. 容灾性好。可以把RDB文件拷贝到远程机器中或者文件系统用于容灾恢复 3. 恢复速度快RDB数据恢复速度远远快于Aof的方式。
RDB缺点| 1.实时性低RDB是每隔一段时间持久化没法做到实时持久化如果在这间隔时间发生故障数据会丢失。 2.存在兼容问题redis多个版本进化存在低版本不能兼容新版本的问题。
AOF的优点
实时性好aof可以通过配置appendsync属性有always每进行一次命令操作就会记录到aof文件中。通过append模式写文件即使中途服务器宕机也可以通过redis-check-aof工具解决数据一致性问题
AOF缺点 1.AOF的文件比RDb大恢复速度慢 2.数据集大的时候比RDB启动效率低。
8.RDB和AOF如何选择
一般来说如果想要达到媲美数据库的安全性应该同时启用两种持久化方式。在这种情况下当redis重启的时候会优先载入AOF文件来恢复原始的数据因为这种情况下AOF保存的文件数据集要比RDB文件保存的数据集要完整。如果可以接收数分钟的以内的数据丢失那么可以只用RDB持久很多用户只使用AOF持久化但不推荐这种因为定时生成RDB快照非常便于进行数据备份并且RDB恢复数据速度也比AOF更加快速此外使用RDb还可以避免AOF的程序bug老的不兼容新版本如果只需要数据在服务器进行运行也可以不使用任何的持久化方式。
9.Redis数据恢复
当redis发生了故障可以从rdb或者Aof中恢复数据恢复过程就是把RDB或者AOF文件拷贝到Redis的数据目录下如果使用AOF恢复配置文件开启AOF然后启动redis-server就可
Redis启动加载流程
判断是否开启AOF开启AOF且存在文件加载AOFAOF关闭或者不存AOF文件在时候加载RDB文件加载AOF/RDB文件启动后Redis启动成功AOF/RDB文件启动失败存在错误时候打印错误信息。
10.Redis4.0的混合持久化了解吗
重启Redis我们很少使用Rbd来恢复内存状态因为会丢失大量的使用数据我们通常使用AOF日志重做但是重放AOF日志性能能相对RDB来说慢很多这样在Redis实例很大的情况下启动需要花费很长时间。 Redis4.0为了解决这个问题带来一个新的持久化选项------混合持久化。将rdb文件的内容和增量的AOF日志文件存在一起这里的AOF日志不再是全量日志而是自持久化开始到持久化结束这段时间发生的增量AOF日志通常这部分AOF日志很小。于是在Redis重启时候可以先加载rdb的内容然后在重放增量AOF日志就可以完全替代之前AOF全量文件重放重启效率因此大幅度提升。 11.高可用
Redis保证高可用主要有三种方式主从、哨兵、集群
12.Redis主从复制了解吗 主从复制是指将一台Redis 服务器的数据复制到其他的Redis 服务器。前者称为主节点(master)后者称为从节 点(slave)。且数据的复制是 单向 的只能由主节点到从节点。Redis 主从复制支持主从同步 和 从从同步两种后 者是Redis后续版本新增的功能以减轻主节点的同步负担
主从复制的作用
数据冗余主从复制实现了数据的热备份是持久化的一种故障恢复当主节点出现问题时候可以由从节点提供服务实现快速的故障恢复负责均衡在主从复制的基础上配合读写分离可以由主节点提供写服务从节点提供读服务分担服务器负载。尤其是在写少读多的场景下通过多个从节点分担读负载可以大大提高Redis 服务器的并发量。高可用基石还是哨兵和集群实现的基础
13.Redis有几种常见的拓扑结构
一主一从一主一从结构是最简单的复制拓扑结构用于主节点出现宕机时从节点提供故障转移支持一主多从一主多从结构又称为星形拓扑结构使得应用端可以利用多个从节点实现读写分离见图6-5。对于读占比较大的场景可以把读命令发送到从节点来分担主节点压力树状主从树状主从结构又称为树状拓扑结构使得从节点不但可以复制主节点数据同时可以作为其他从节点的主节点继续向下层复制。通过引入复制中间层可以有效降低主节点负载和需要传送给从节点的数据量
14.Redis主从复制原理
1 保存主节点信息ip和端口 2. 主从建立连接从节点发现新的主节点后会尝试和主节点建立网络连接 3. 发送ping命令连接建立成功后从节点发送ping请求进行首次通信主要是检测主从之间网络套接字是否可用、主节点当前是 否可接受处理命令。 4.权限验证如果主节点要求密码验证从节点必须正确的密码才能通过 5.同步数据集主从连接正常通信后主节点会把持有的数据全部发送给从节点 6.命令持续复制接下来主节点会持续的将写命令发送给从节点保证主从数据一致。
15.说说主从数据同步的方式
Redis在2.8以上的版本使用psync命令完成主从数据同步同步过程分为全量复制和部分复制 全量复制一般用于初次复制场景当数据量较大时会对主从节点和网络造成很大的开销
1.发送psync命令进行数据同步由于是第一次进行复制从节点没有复制偏移量和主节点的运行ID所以发送 psync-1。
主节点根据psync-1解析出当前为全量复制回复FULLRESYNC响应。从节点接收主节点的响应数据保存运行ID和偏移量offset主节点执行bgsave保存RDB文件到本地主节点发送RDB文件给从节点从节点把接收的RDB文件保存在本地并直接作为从节点的数据文件对于从节点开始接收RDB快照到接收完成期间主节点仍然响应读写命令因此主节点会把这期间写命令数 据保存在复制客户端缓冲区内当从节点加载完RDB文件后主节点再把缓冲区内的数据发送给从节点保 证主从之间数据一致性。从节点接收完主节点传送来的全部数据后会清空自身旧数据从节点清空数据后开始加载RDB文件从节点成功加载完RDB后如果当前节点开启了AOF持久化功能 它会立刻做bgrewriteaof操作为了保证 全量复制后AOF持久化文件立刻可用 部分复制 部分复制主要是针对全量复制的过高开销做的一种优化措施使用psync{runId}{offset}命令实现。当从节点 slave正在复制主节点master时如果出现网络闪断或者命令丢失等异常情况时从节点会向主节点要求补 发丢失的命令数据如果主节点的复制积压缓冲区内存在这部分数据则直接发送给从节点这样就可以保持主从节 点复制的一致性。当主从节点之间网络出现中断时如果超过repl-timeout时间主节点会认为从节点故障并中断复制连接主从连接中断期间主节点依然响应命令但因复制连接中断命令无法发送给从节点不过主节点内部存在的复 制积压缓冲区依然可以保存最近一段时间的写命令数据默认最大缓存1MB。当主从节点网络恢复后从节点会再次连上主节点当主从连接恢复后由于从节点之前保存了自身已复制的偏移量和主节点的运行ID。因此会把它们当作psync参 数发送给主节点要求进行部分复制操作。主节点接到psync命令后首先核对参数runId是否与自身一致如果一致说明之前复制的是当前主节点之后 根据参数offset在自身复制积压缓冲区查找如果偏移量之后的数据存在缓冲区中则对从节点发送CONTINUE响应表示可以进行部分复制。主节点根据偏移量把复制积压缓冲区里的数据发送给从节点保证主从复制进入正常状态。
16.主从同步的存在哪些问题
一旦主节点出现故障就需要手动将一个从节点晋升为主节点同时需要修改应用放的主节点地址还需要命令其他从节点去复制主节点整个过程都需要人工干预主节点的写能力收到单机限制主节点的存储能力收到单机限制
第一个是Redis的高可用问题二三是分布式问题。
17.Redis Sentinel哨兵了解吗
主从复制存在没有办法自动故障转移所以需要一个方案来完成自动转移他就是redis sentinel 哨兵机制。 Redis sentinel由哨兵节点和数据节点两部分组成
哨兵节点哨兵系统由一个或者多个哨兵节点组成哨兵节点是特殊的redis节点不存储数据对数据进行监控。数据节点主节点和从节点都是数据节点
在复制的基础上哨兵实现了自动化故障恢复技术
监控哨兵会不断地检查主节点和从节点是否正常自动故障转移当主节点不可用的时候哨兵会自动开始故障转移操作他会将失效的主节点移除其中一个从节点升级为新的主节点并让其他从节点复制新的主节点配置提供者客户端在初始化的时候通过连接哨兵来获得当前Redis的主节点地址通知哨兵可以将故障转移的结果发个客户端 其中监控和自动故障转移功能使得哨兵可以及时发现主节点故障并完成转移。而配置提供者和通知功能则需要在与客户端的交互中才能体现
18.Redis Sentinel哨兵实现原理知道吗
哨兵模式是通过哨兵节点完成对数据节点的监控、下线、故障转移 Redis sentinel通过三个定时任务完成对各个节点的监控 1.每隔10秒每个Sentinel节点会向主节点和从节点发送info命令获取最新的拓扑结构 2.每隔2秒每个Sentinel节点会向Redis数据节点发送Sentinelhello频道上发送该Sentinel节点对主节点的判断以及当前Sentinel节点的信息。 3.每隔1秒每个Sentinel节点会向主节点从节点其余Sentinel节点发送一条ping命令做一次心跳检测来确认这些节点是否可达
主观下线和客观下线 主观下线就是哨兵认为某个节点有问题客观下线就是超过一定数量的哨兵节点认为主节点有问题。
**1.主观下线**每个Sentinel节点每隔1秒对主节点从节点、其他Sentinel节点发送ping命令做心跳检测当这些节点超过dow-after-minlliseconds没有进行回复那么就对该节点判断失败这个行为叫做主观下线。
2.客观下线当Sentinel下线的是主节点时该Sentinel节点会通过Sentinel-is-master-down-by-addr命令向其他Sentinel节点询问对主节点的判断当超过《quorum》个数Sentinel节点认为主节点确实有问题这是该Sentinel节点会做出客观下线的决定。
领导者Sentinel节点选举 Sentinel节点直接会做一个领导者选举工作选择一个Sentinel节点作为领导者进行故障转移的工作Redis使用Raft算法实现领导者的选举故障转移 领导者选出的Sentinel节点负责故障转移过程如下
在从节点列表中选出一个节点作为新的主节点这一步是相对复杂一些的一步Sentinel领导者节点会对第一步选出来的从节点执行slaveof no one命令让其成为主节点Sentinel领导者节点会向剩余的从节点发送命令让它们成为新主节点的从节点Sentinel节点集合会将原来的主节点更新为从节点并保持着对其关注当其恢复后命令它去复制新的主节点
19.领导者Sentinel节点选举了解吗
Redis实现Raft算法实现领导者选举
每个在线的Sentinel节点都有资格成为领导者当它确认主节点主观 下线时候会向其他Sentinel节点发送sentinel is-master-down-by-addr命令 要求将自己设置为领导者收到命令的Sentinel节点如果没有同意过其他Sentinel节点的请求那么将同意该请求否则拒绝如果该Sentinel节点发现自己的票数已经大于于maxquorumnumsentinels/21那么将成为领导者如果此过程没有选出领导者将进入下一次选举。
20.新的主节点是怎样被挑选出来的 过滤不健康主观下线断线、5秒内没有回复过的、失联超过10秒的选择slave-proority从节点优先级最高的从节点列表如果存在则返回不存在就继续选择复制偏移量最大的从节点复制的最完整如果存在则返回不存在继续选择runid最小的节点。
ps请一键三连给个关注我们一起进步。