redis高级(面试题一)

embedded/2024/10/15 20:09:14/

目录

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

redis%20database)-toc" style="margin-left:40px;">1、RDB(redis database)

2、AOF

3、区别

redis%E7%9A%84%E4%B8%BB%E4%BB%8E%E9%9B%86%E7%BE%A4%E6%9C%89%E4%BB%80%E4%B9%88%E7%94%A8%EF%BC%9F-toc" style="margin-left:0px;"> 二、redis的主从集群有什么用?

redis%E7%9A%84%E4%B8%BB%E4%BB%8E%E9%9B%86%E7%BE%A4-toc" style="margin-left:40px;">1、什么是redis的主从集群

redis%E4%B8%BB%E4%BB%8E%E9%9B%86%E7%BE%A4%EF%BC%88%E4%B9%9F%E5%B0%B1%E6%98%AF%E6%9C%89%E4%BB%80%E4%B9%88%E7%94%A8%EF%BC%89-toc" style="margin-left:40px;">2、为什么要使用redis主从集群(也就是有什么用)

redis%E7%9A%84%E5%93%A8%E5%85%B5%E9%9B%86%E7%BE%A4%E6%9C%89%E4%BB%80%E4%B9%88%E7%94%A8%EF%BC%9F-toc" style="margin-left:0px;">三、redis的哨兵集群有什么用?

redis%E7%9A%84%E5%93%A8%E5%85%B5%E9%9B%86%E7%BE%A4-toc" style="margin-left:40px;">1、什么是redis的哨兵集群

 2、哨兵的作用

3、总结

redis%E5%88%86%E7%89%87%E9%9B%86%E7%BE%A4%E6%9C%89%E4%BB%80%E4%B9%88%E7%94%A8%EF%BC%9F-toc" style="margin-left:0px;"> 四、redis分片集群有什么用?

1、什么是分片集群?        

2、分片集群的作用?

3、总结


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

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

redis%20database)">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%E7%9A%84%E4%B8%BB%E4%BB%8E%E9%9B%86%E7%BE%A4%E6%9C%89%E4%BB%80%E4%B9%88%E7%94%A8%EF%BC%9F"> 二、redis的主从集群有什么用?

redis%E7%9A%84%E4%B8%BB%E4%BB%8E%E9%9B%86%E7%BE%A4">1、什么是redis的主从集群

        redis主从集群结构如图:

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

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

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

redis%E4%B8%BB%E4%BB%8E%E9%9B%86%E7%BE%A4%EF%BC%88%E4%B9%9F%E5%B0%B1%E6%98%AF%E6%9C%89%E4%BB%80%E4%B9%88%E7%94%A8%EF%BC%89">2、为什么要使用redis主从集群(也就是有什么用)

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

redis%E7%9A%84%E5%93%A8%E5%85%B5%E9%9B%86%E7%BE%A4%E6%9C%89%E4%BB%80%E4%B9%88%E7%94%A8%EF%BC%9F">三、redis的哨兵集群有什么用?

redis%E7%9A%84%E5%93%A8%E5%85%B5%E9%9B%86%E7%BE%A4">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%E5%88%86%E7%89%87%E9%9B%86%E7%BE%A4%E6%9C%89%E4%BB%80%E4%B9%88%E7%94%A8%EF%BC%9F"> 四、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.ppmy.cn/embedded/128049.html

相关文章

【内网映射】frps实现内网映射

1. 简介 在当今互联网时代,远程访问内网资源已成为一种常见需求。无论是在家访问办公室的电脑,还是远程管理家庭NAS,内网映射都是一种强大的解决方案。 本文将详细介绍如何使用frp(Fast Reverse Proxy)来实现这一目标。 1.1 frp frp是一个高性能的反向代理应用,可以帮助您轻…

(AtCoder Beginner Contest 375) 题解(下)

一、题解 第 E 题 3 Team Division 一眼看像背包,观察数据范围,合法的总能力值 ≤ 500 \le 500 ≤500,那么我们可以设计一个背包DP: int dp[110][510][510]; //dp[i][j][k] 表示前 i 个人,分给第一组的能力值是 j&…

使用Python抓取并分析外汇汇率数据

使用Python抓取并分析外汇汇率数据 在当今全球化的经济环境中,了解不同货币之间的汇率是非常重要的。对于个人投资者、旅行者以及企业来说,准确及时的汇率信息可以帮助他们做出更加明智的决策。本文将介绍如何使用Python编程语言来从网络上获取最新的外…

Unity游戏通用框架——UI的管理和加载

需求:为了方便UI的管理,编写一个管理类,管理所有UI的加载、隐藏或销魂,每个UI都继承自一个UIWindow类,存放在Resource的指定目录下,通过UIManager进行管理。每个继承自UIWindow的UI天然有UI的打开关闭等基本…

Python 无法安装pybluez 解决办法

直接使用 pip install pybluez 安装会报错 那么可以尝试手动安装 先下载 pybluez-0.30的包: CSDN: https://download.csdn.net/download/rotion135/89884852 Github:https://github.com/pybluez/pybluez 先安装依赖 sudo apt-get install …

Kafka之生产者

本章内容将整理下Kafka体系结构中的生产者相关的一些知识。 1. 生产者客户端 生产者客户端在Kafka的发展历程当中一共有两个重大版本: 一个是基于Scala语言开发的版本,称为Old Producer或Scala版的生产者客户端。一个是Kafka0.9.x版本之后以Java语言开发…

【微服务】微服务注册:构建灵活的服务管理机制

目录 引言一、什么是微服务注册?1.1 服务注册中心的作用1.2 服务注册中心的工作原理1.3 示意图 二、常见的微服务注册中心2.1 各注册中心详细对比 三、微服务注册的实现方式3.1 Spring Cloud Netflix Eureka3.2 Consul3.3 Zookeeper3.4 etcd 四、微服务注册的注意事…

JavaScript 入门

1. HTML、CSS、JavaScript 之间的关系 HTML:网页的结构(骨) CSS:网页的表现(皮) JavaScript:网页的行为(魂) 2. 引入方式 3种引入方式,语法如下&#xff…