redis高级(面试题一)

news2024/10/9 8:53:00

目录

一、Redis持久化机制有哪些?有什么区别?

1、RDB(redis database)

2、AOF

3、区别

 二、redis的主从集群有什么用?

1、什么是redis的主从集群

2、为什么要使用redis主从集群(也就是有什么用)

三、redis的哨兵集群有什么用?

1、什么是redis的哨兵集群

 2、哨兵的作用

3、总结

 四、redis分片集群有什么用?

1、什么是分片集群?        

2、分片集群的作用?

3、总结


一、Redis持久化机制有哪些?有什么区别?

        redis提供了两种持久化机制:RDB(redis database)和AOF(append-only file)。这两种机制各有优缺点使用不同的场景。

1、RDB(redis database)

        RDB是一种快照持久化方式他会在指定的时间间隔内将redis的数据集保存到一个二进制文件中。

特点:

  • 高效:RDB 文件是一个紧凑的二进制文件,适合用于备份和恢复。
  • 快速恢复:由于是全量数据快照,恢复速度较快。
  • 性能影响:在生成RDB文件时,redis会分出一个紫禁城来进行持久化操作,父进程继续处理客户端请求,因此对性能影响较小。

对应有如下三种配置:

save 900 1           # 900秒内至少有1个key发生变化,则执行RDB
save 300 10          # 300秒内至少有10个key发生变化,则执行RDB
save 60 10000        # 60秒内至少有10000个key发生变化,则执行RDB

缺点:

  • 数据丢失风险:如果在两次快照之间发生故障,这段时间内的数据将会丢失。
  • 内存消耗:生成 RDB 文件时,需要占用额外的内存。

2、AOF

        AOF是一种日志持久化方式,他会将redis执行的每个写操作追加到一个日志文件中。

特点:

  • 数据完整性:AOF 记录了所有的写操作,因此数据完整性较高,即使发生故障,也可以通过重放日志文件来恢复数据。
  • 灵活性:AOF提供了多种同步策略,可以根据需求选择不同的数据安全和性能平衡。

配置有三种第一种是always一直开启这种比较耗性能,第二种是everyseconds每秒执行,这种可能会丢失数据,但是丢失只会丢失一秒内的数据。另一种是no不开启。

缺点:

  • 文件体积大:AOF 文件通常比 RDB 文件大,因为它记录了所有的写操作。
  • 恢复速度慢:由于需要重放所有的写操作,恢复速度较慢。

3、区别

特性RDBAOF
数据完整性较低(可能丢失两次快照间的数据)较高(记录所有写操作)
文件体积较小(二进制快照)较大(记录所有写操作)
恢复速度较快(全量数据快照)较慢(需要重放日志)
性能影响较小(fork子进程)较大(频繁写日志)
适用场景数据备份、快速恢复数据完整性要求高

 二、redis的主从集群有什么用?

1、什么是redis的主从集群

        redis主从集群结构如图:

         在该图中有一个redis集群,集群中有一个master节点,两个slave节点,当我们通过redis的java客户端访问主从集群是,应该做好路由。

  • 如果是写操作,应该访问master节点,master会自动将数据同步给两个slave节点

  • 如果是读操作,建议访问各个slave节点,从而分担并发压力

2、为什么要使用redis主从集群(也就是有什么用)

        单节点的redis的并发能力是有上限的,要进一步tigaoredis的并发能力就需要搭建主从集群,从而实现读写分离,从而实现提高redis的读功能的高并发。

三、redis的哨兵集群有什么用?

1、什么是redis的哨兵集群

        redis提供了哨兵(sentilel)机制来监控主从集群状态,确保集群的高可用性。哨兵集群的原理图如下:

 2、哨兵的作用

  • 状态监控Sentinel 会不断检查您的masterslave是否按预期工作。

  • 故障恢复:如果master故障,sentinel会将一个slave提升为master。当故障实例恢复后会成为slave。

  • 状态通知:sentinel充当redis客户端的服务发现来源,当集群发生failover时,会将最新的集群信息推送给redis的客户端。

sentinel如何知道一个redis节点是否宕机的?

        sentinel基于心跳机制检测服务状态,每隔一秒向集群的每个节点发送ping命令,并通过实力的响应结果来做出判断:

  • 主观下线(sdown):如果某sentinel节点发现某Redis节点未在规定时间响应,则认为该节点主观下线。

  • 客观下线:若超过指定数量的sentinel都认为该节点主观下线,则该节点客观下线。通常为大于一半时认为该节点客观下线,sentinel节点数量至少三台。

如图:

3、总结

Sentinel的三个作用是什么?

  • 集群监控

  • 故障恢复

  • 状态通知

Sentinel如何判断一个redis实例是否健康?

  • 每隔1秒发送一次ping命令,如果超过一定时间没有相向则认为是主观下线(sdown

  • 如果大多数sentinel都认为实例主观下线,则判定服务客观下线(odown

故障转移步骤有哪些?

  • 首先要在sentinel中选出一个leader,由leader执行failover

  • 选定一个slave作为新的master,执行slaveof noone,切换到master模式

  • 然后让所有节点都执行slaveof 新master

  • 修改故障节点配置,添加slaveof 新master

sentinel选举leader的依据是什么?

  • 票数超过sentinel节点数量1半

  • 票数超过quorum数量

  • 一般情况下最先发起failover的节点会当选

sentinel从slave中选取master的依据是什么?

  • 首先会判断slave节点与master节点断开时间长短,如果超过down-after-milliseconds * 10则会排除该slave节点

  • 然后判断slave节点的slave-priority值,越小优先级越高,如果是0则永不参与选举(默认都是1)。

  • 如果slave-prority一样,则判断slave节点的offset值,越大说明数据越新,优先级越高

  • 最后是判断slave节点的run_id大小,越小优先级越高(通过info server可以查看run_id)。

 四、redis分片集群有什么用?

1、什么是分片集群?        

        分片的意思,就是把数据拆分存储到不同节点,这样整个集群的存储数据量就更大了。

redis分片集群的结构如图:

分片集群特征:

  • 集群中有多个master,每个master保存不同分片数据 ,解决海量数据存储问题

  • 每个master都可以由多个slave节点,确保高可用。

  • master之间通过ping监测彼此状态,类似哨兵作用。

  • 客户端请求可以访问集群任意节点,最终都会被转发到数据所在节点。

2、分片集群的作用?

  分片集群主要是用来解决两个问题

  • 海量数据存储

  • 高并发写

3、总结

1. redis分片集群的原理?

        redis利用散列插槽的方式实现数据分片,在redis集群中共有16384个散列插槽,集群中的每一个节点都会分配一定数量的散列插槽。具体的分配在创建集群时就已经指定了。

2. redis分片集群如何判断某个key应该在哪一个实例?

  • 将16384个插槽分配到不同的实例

  • 根据key计算哈希值,对16384取余

  • 余数作为插槽,寻找插槽所在实例即可

3. 如何将同一类型的数据固定的保存在同一个redis实例中?

  • Redis计算key的插槽值时会判断key中是否包含{},如果有则基于{}内的字符计算插槽

  • 数据的key中可以加入{类型},例如key都以{typeId}为前缀,这样同类型数据计算的插槽一定相同

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ORA-19815 db_recovery_file_dest_size 100%

1、alert日志报错 ORA-19815 db_recovery_file_dest_size 100% 恢复区空间使用满 2、rm删除后操作系统空间使用,但V$RECOVERY_FILE_DEST记录的空间使用率仍然是满的 3、rman delete expired 归档日志后恢复正常 4、当然可以通过增大db_recovery_file_dest_size来临时…

算法笔记(十四)——多源 BFS

文章目录 <font colorred>01 矩阵<font colorred>飞地的数量/font>地图中的最高点地图分析 多源 BFS 单源最短路问题&#xff1a;一个起点到一个终点的最短路&#xff1b; 解决步骤&#xff1a; 把起点放进队列里一层一层往外扩 相关文章&#xff1a;算法笔记&a…

0基础跟德姆(dom)一起学AI 机器学习04-逻辑回归

逻辑回归简介 应用场景 逻辑回归是解决二分类问题的利器 数学知识 sigmoid函数 概率 极大似然估计 核心思想&#xff1a; 设模型中含有待估参数w&#xff0c;可以取很多值。已经知道了样本观测值&#xff0c;从w的一切可能值中&#xff08;选出一个使该观察值出现的概率为…

C++拾趣——绘制Console中DropdownMenu

大纲 居中显示窗口清屏并重设光标绘制窗口绘制窗口顶部绘制下拉行绘制下拉框选项绘制按钮行绘制窗口底部 修改终端默认行为对方向键的特殊处理过程控制Tab键的处理Enter键的处理上下左右方向键的处理 完整代码代码地址 这次我们要绘制下拉菜单&#xff0c;如下图。 居中显示窗口…

C语言 | Leetcode C语言题解之第466题统计重复个数

题目&#xff1a; 题解&#xff1a; #include <stdlib.h> #include <stdio.h> #include <stdbool.h> #include <string.h> #include <math.h> #include <limits.h>#define MMAX(a, b) ((a) > (b)? (a) : (b)) #define MMIN(a,…

xianshan分支预测器BPU

xianshan分支预测器BPU 1 RISC-V分支预测1.0 分支预测基本类型1.0.1 条件分支指令1.0.2 无条件分支指令 1.1 方向预测1.1.1 饱和计数器法1.1.1.1 Questions 1.1.2 分支历史法--程序局部性原理1.1.2.1 Questions 1.2 目标地址预测1.2.1 分支目标缓存--BTB 1.3 预测指令类型1.3.1…

【小白向】机器人入门之ROS系统的学习(Ubuntu24.04+ROS2)

目录 一.复杂的机器人系统 二.ROS机器人系统 1.简介 1.节点 2.话题 2.安装 3.测试 4.可视化 RQT&#xff1a; RVIZ&#xff1a; 显示属性&#xff1a; 显示状态&#xff1a; 一.复杂的机器人系统 依照我们现在的技术来看&#xff0c;机器人系统仍是极其复杂的&#xff0c;往…

深入了解音频剪辑在线工具的特色与优势

在数字时代&#xff0c;音频内容已成为连接人心的重要桥梁。如果你也有同样的兴趣爱好&#xff0c;那不妨看看我今天要介绍的音频剪辑在线相关的工具们吧。 1.福昕音频剪辑 链接直达>>https://www.foxitsoftware.cn/audio-clip/ 福昕音频剪辑工具&#xff0c;专为音乐…

【H2O2|全栈】关于CSS(11)flex——更加优雅的布局

目录 CSS3入门 前言 准备工作 布局优化 如何使用flex布局 容器与成员 概念 轴线 容器的属性 成员的属性 预告和回顾 后话 CSS3入门 前言 本系列博客主要介绍CSS有关知识点&#xff0c;当前章节讲述CSS3相关内容。 本章节讲述flex布局的相关知识。 部分内容仅代…

数据结构 ——— 单链表oj题:环形链表

目录 题目要求 手搓简易环状单链表 代码实现 问题1&#xff1a;slow 指针和 fast 指针一定会相遇吗 问题2&#xff1a;slow 每次走一步&#xff0c;fast 每次走 n 步是否还能判断链表带环&#xff1f;&#xff08;n > 2&#xff09; 题目要求 有一个单链表的头节点 …

【翻译】在 Python 应用程序中使用Qt Designer的UI文件

原文地址&#xff1a;Using a Designer UI File in Your Qt for Python Application 直接上图&#xff0c;上代码 将UI文件转为Python To demonstrate, we use the Qt Widgets animation easing example. 为了演示&#xff0c;我们使用 Qt Widgets 动画简化示例。 这个应用程…

快递查询软件:实现单号识别与批量物流查询的高效工具

随着网络购物的普及&#xff0c;快递物流行业迎来了前所未有的发展机遇&#xff0c;同时也面临着巨大的挑战。跟踪物流信息成为一个难题&#xff0c;因此&#xff0c;快递查询软件的核心功能之一便是单号识别。传统的快递单号输入方式繁琐且易出错在此背景下&#xff0c;快递查…

游戏盒子推广全攻略:从用户洞察到策略实施

在移动互联网时代&#xff0c;游戏盒子的推广已经成为众多游戏代理商和开发者的重要课题。面对激烈的市场竞争&#xff0c;如何高效吸引并留住玩家&#xff0c;成为游戏盒子推广的关键。本文将结合Xinstall这一专业App推广工具&#xff0c;探讨游戏盒子推广的有效策略。 一、市…

详细分析Java8中的StringJoiner | 对比StringBuilder(附Demo)

目录 前言1. 差异对比2. 基本知识3. 源码分析4. Demo 前言 对于Java的基本知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目】实战CRUD的功能整理&#xff08;持续更新&#xff09; 1. 差异对比 展…

多种方式确定Linux是CentOS还是Ubuntu

目录 前言正文 前言 对应的基本知识比较少&#xff0c;以下只是记录总结 由于目前使用的是centos&#xff0c;后续找到linux会对应补充 正文 要确定Linux系统是CentOS还是Ubuntu&#xff0c;可以通过以下几种方式进行分析 一、查看发行版信息文件&#xff1a; CentOS&…

UE5运行时动态加载场景角色动画任意搭配-角色及动画(一)

通过《MMD模型及动作一键完美导入UE5》系列文章,我们可以把外部场景、角色、动画资产导入UE5,接下来我们将实现运行时动态加载这些资产,并任意组合搭配。 1、骨骼动画复用 1、大部分模型骨骼是不通用的,比如这些裙子也是有骨骼的,属于模型特有的,但是对于动画来说,很多…

【实时计算 Flink】SQL作业大状态导致反压的调优原理与方法

状态管理不仅影响应用的性能&#xff0c;还关系到系统的稳定性和资源的有效利用。如果状态管理不当&#xff0c;可能会导致性能下降、资源耗尽&#xff0c;甚至系统崩溃。本文为您介绍SQL作业大状态导致反压的调优原理与方法。 运行原理&#xff1a;状态算子的产生 作为一种特…

面试题:Redis(二)

1. 面试题 2. MoreKey案列 事故案例 2.1 生成上如何限制key*/flushdb/flushall等危险命令的使用&#xff1f; 通过redis.conf配置文件中在SECURITY选项中禁用这些命令 2.2 不用key*避免卡顿那用什么&#xff1f; 用scan命令&#xff0c;类似mysql中的limit命令 语法&…

数学建模算法与应用 第2章 整数规划及其求解方法

目录 2.1 概述 2.2 0-1整数规划模型 2.3 分枝定界法&#xff08;Branch and Bound&#xff09; 2.4 蒙特卡洛法&#xff08;随机取样法&#xff09; Matlab代码示例&#xff1a;蒙特卡洛法求解简单整数规划 2.5 整数规划的计算机求解工具 习题 2 总结 整数规划是线性规…

Window11 安装Java21教程

随着Java版本的迭代&#xff0c;最新的长期支持版本已经更新到Java21了&#xff0c;虽然笔者许多代码还是当年用Java8写的&#xff0c;但抱残守缺从来不适合IT人员&#xff0c;该来的我们始终要欣然面对。 其实随着各项技术的发展&#xff0c;Java许多组件现在其实都不需要或者…