2.精通Redis—【基础理论】、【持久化】、【缓存设计】、Redis运维、【高可用】、场景进阶

本文目录如下:

精通 Redis — 基础 Redis知识

Redis从入门到精通

一、基础理论【重要】

简单介绍下 Redis?

  • Redis 是一种基于 键值对 (key-value)NoSQL 数据库,支持丰富的 数据类型
  • Redis 将数据存放在 内存 中,读写性能 非常出色,可以满足对 海量数据快速读写
  • 官方数据 可达 100000 QPS

Redis 有哪些特性 (为什么使用 Redis)?

  • 高性能Redis 将数据存放在 内存 中,读写性能 非常出色,可以满足对 海量数据快速读写
  • 丰富的数据类型: 支持 stringlistsetzsethash 等。
  • 丰富的功能:提供了 数据缓存数据持久化消息队列分布式锁 等功能。

Redis 有哪些功能?

  • 数据缓存
  • 数据持久化
  • 消息队列
  • 分布式锁

Redis 数据类型有哪些?

Redis使用——Redis支持的五种数据类型

  • string(字符串)
  • list(列表): string 类型的 列表
  • hash(哈希)
  • set(集合): string 类型的 无序集合,集合中不能出现重复的数据。
  • zset(有序集合): string 类型的 有序集合,每个元素都会关联一个 分数

Redis 各种 数据类型 的 应用场景 有哪些?

主要应用在 高并发实时请求 的场景:

  • string缓存功能 (如 粉丝数 等)、计数
  • hash缓存对象
  • list缓存列表消息队列
  • set标签共同关注
  • zset用户点赞统计用户排序

Redis 常用操作 (常用指令)?

Redis基础知识—基础知识、五大数据类型常用方法

  • keys: 查找所有符合给定模式 patternkey
  • set: 添加 string类型数据。
  • get: 获取 key 对应的 Value
  • expire: 为给定 key 设置 生存时间
  • exists: 检查给定 key 是否存在。
string命令: set、get
List命令: lpush、lpop
Hash命令: hset、hget

Redis 为什么比 MySQL 速度快?

  • 基于内存
  • 采用单线程: 单线程 采用 IO道路复用技术 (epoll) 处理多个请求。
  • 高性能数据结构:如 Hash跳表 (可以实现二分查找的有序链表)

Redis 采用单线程的优缺点?

Redis 早期的瓶颈可能是 内存大小网络带宽,而不是 CPU单线程的优点

  • 没有 线程竞争CPU消耗
  • 没有 线程切换资源消耗

单线程的缺点:

  • 无法发挥 多核CPU性能
  • 随着 并发量 越来越大,单线程 已经无法满足需求。

简单说⼀下 Redis中的 I/O多路复用技术?

Redis 单线程如何处理那么多的并发客户端连接

  • IO多路复用技术 是用 一个线程 来管理 多个连接 的技术,从而提高 并发处理能力
  • 只有一个 主线程 负责监听 连接请求,并把 新连接 加入到 事件列表 中。

Memcached 和 Redis 有哪些区别?

  • 数据结构Memcached 仅支持存储简单的 键值对,不支持 列表哈希表 等复杂的 数据结构
  • 持久化机制Memcached 不支持 数据持久化,一旦服务器崩溃,数据就会丢失。

(了解) 简单说一下Redis 中的跳表?

Redis数据结构之——跳表skiplist

  • 跳表zset 底层使用的一种数据结构。
  • 跳表 通过在 单链表 上添加多个 索引,实现了 跳跃查询

二、持久化【重要】

Redis 持久化有几种方式?

Redis持久化–AOF和RDB的区别

RDB:用 数据快照 的方式 半持久化存储

  • RDB 可以 更快地恢复数据,但是会 损失一些数据
  • 可用性差RDB持久化 时如果 文件过大 可能会造成 服务器的阻塞

AOF: 以 记录命令 的方式 完全持久化存储

  • AOF 虽然 速度稍慢,但是 数据完整性 高。
  • 可用性好增量操作,不会 阻塞服务器

RDB 和 AOF 如何选择?

  • 如果对数据 完整性 要求较高,可以选择 AOF
  • 如果可以接受 数分钟以内的数据丢失,那么可以只使用 RDB 持久化

三、缓存设计【重要】

什么是缓存穿透?怎么解决?[恶意]

Redis–缓存穿透–含义/原因/解决方案

缓存穿透:查询 缓存数据库 中都没有的数据,缓存 无法命中,导致每次请求都要到 数据库 去查询。


解决方案

  • 缓存空值/默认值:数据库中查询不到数据时,把⼀个 空对象 保存到 缓存,之后再访问这个数据,就会从 缓存 中获取。
  • 布隆过滤器布隆过滤器 会记录 数据是否存在,可过滤 无效的 查询请求。

什么是缓存雪崩?怎么解决?[故障]

Redis–缓存雪崩–含义/原因/解决方案

缓存雪崩缓存服务器 发生故障,或大量 key 同时过期,导致每次请求都要到数据库去查询。


解决方案

  • 尽量分散 key过期时间
  • 保证 Redis服务高可用

什么是缓存击穿?怎么解决?[故障]

缓存击穿:⼀个并发访问量比较大的 key 在某个时间 过期,导致每次请求都要到数据库去查询。


解决方案

  • 设置热点数据永远不过期
  • 加锁更新:对该 key 加锁,查询数据库更新缓存

生产上 Redis内存 设置为多少比较合适?

Redis内存设置

由于 Redis 底层借鉴了 Hash算法,因此推荐将 Redis内存 设置为 物理内存四分之三。(类似于 HashMap加载因子=0.75?)


Redis 与 数据库 如何保持一致?

MySQL 数据更改时,Redis 需要下面的措施保持 数据一致性

  • 先更新数据库,再删除缓存:即 删除缓存 取代 更新缓存
    缺点: 如果 缓存删除失败,数据就会不一致,可以通过 消息队列确认机制 来保证被删除】

使用过 Redis 做消息队列么,你是怎么用的?

使用 RedisList 数据结构 可以实现 消息队列

  • 生产者端,可以通过向 队列尾部 添加消息的方式发布消息 (rpush)。
  • 消费者端,可以通过从 队列头部 取出消息的方式消费消息 (lpop);

四、Redis运维

Redis报内存不足怎么处理?

Redis 内存不⾜ 有如下几种处理方式:

  • 修改 maxmemory 参数,增加 Redis 可用内存
  • 修改过期键的 删除策略,及时 释放内存空间

Redis 过期键的删除策略?

  • 定期删除: 每 隔一段时间 程序就对 数据库 进行一次检查,删除里面的 过期键
  • 惰性删除: 放任键过期不管,获取键时 检查取得的键 是否过期,过期则 删除该键

Redis 数据 淘汰策略 有哪几种?

如果数据存满了,新数据存不进去, 则 redis 会执行 淘汰策略。(主要是 LRU算法)

  • 拒绝写请求 (默认策略):对于 写请求 不再提供服务,直接 返回错误
  • 淘汰最近过期 key:在设置了 过期时间key 中,淘汰 过期时间剩余最短 的。
  • LRU 淘汰 key:从所有 key 中使用 LRU算法 进行淘汰(LRU算法:即 最近最少使用算法)。
  • LRU 淘汰 过期key:从设置了 过期时间key 中使用 LRU算法 进行淘汰。

五、高可用【重要】

1、主从

Redis 中的 主从复制 了解吗?

主从复制:是指将 主节点 (master) 中的数据,复制到其他的 从节点 (slave) 的过程。数据的复制是 单向的,只能由 主节点从节点


主从复制 的 作用:

  • 故障恢复:当 主节点 发生故障时,可以由 从节点 提供服务。
  • 读写分离:通过 主从复制 技术可实现 读写分离,大大提高了 Redis 服务器并发量
  • ⾼可用基石主从复制哨兵集群 功能的 基础

Redis主从有几种常见的拓扑结构?

根据 拓扑复杂性 可以分为以下三种:

  • ⼀主⼀从:可提供 故障转移 服务。
  • ⼀主多从:可提供 读写分离故障转移 服务。
  • 树状主从结构:通过引入 复制中间层,可以降低 主节点 维护 从节点负担

主从复制 存在哪些问题?

主从复制 虽好,但也存在 ⼀些问题

  • 主从复制 无法完成 自动故障转移Redis Sentinel (哨兵) 可以解决这个问题。
  • 主节点写能力存储能力 受到 单机的限制

2、Sentinel (哨兵)

Redis Sentinel (哨兵) 了解吗?

Redis Sentinel 由两部分组成,哨兵节点数据节点

  • 哨兵节点哨兵节点 是特殊的 Redis 节点不存储数据
  • 哨兵节点数据节点 进行 监控,当 主节点 发生故障 时,提供 自动故障转移 功能 。

数据节点主节点从节点 都是 数据节点
在这里插入图片描述


领导者 Sentinel节点选举 了解吗?

点击查看

Redis 使⽤了 Raft算法 实现 领导者选举,⼤致流程如下:

  • 1.Sentinel节点 确认 主节点 下线的时候,会向其他 Sentinel节点 发送命令, 要求将自己设置为 领导者
  • 2.每个 Sentinel节点 都只能 投出一票
  • 3.如果该 Sentinel节点 发现自己的 票数 已经 >= max(quorum, num(sentinels)/2+1),那么它将成为 领导者
  • 4.如果此过程没有选举出领导者,将进⼊ 下一轮选举

注:正常情况下,最先确认 master 客观下线的 Sentinel节点,就会成为 执行故障转移leader
在这里插入图片描述


3、(了解) 集群

(了解) Redis 集群了解吗?

Redis集群 由多个 节点(Node) 组成,集群中的节点分为 主节点从节点

  • 主节点:负责 读写请求集群信息的维护
  • 从节点:只进行主节点数据和状态信息的复制。

Redis 集群 有两大特性:

  • 数据分区数据分区 是集群 最核心 的功能。集群 将数据分散到 多个节点
  • ⾼可用: 集群支持 主从复制 和主节点的 自动故障转移 (与哨兵类似),当任⼀节点发⽣故障时,集群仍然可以对外提供服务。
    在这里插入图片描述

(了解) Redis 集群 数据分区 的好处?
  • Redis 存储能力 突破了 单机 的限制,存储容量 ⼤⼤增加;
  • 每个 主节点 都可以对外提供 读服务写服务,⼤⼤提⾼了 Redis 服务器并发量。(Redis集群 中只有主节点,没有从节点)。

(了解) 集群(Cluster)如何进行节点通信?

Redis集群–节点通信的过程(原理)

  • Redis集群 采用 P2PGossip (流言)协议
  • Gossip协议:节点之间彼此不断 交换信息, 一段时间后所有的节点都会知道 完整的集群信息

精通 Redis — 进阶 Redis知识

Redis–秒杀的解决方案?

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

页川叶川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值