Redis常用进阶 存储原理和主从思路

Redis常用进阶 存储原理和主从思路

简介

此篇用于需要时随时查阅的知识. 由于不断的学习总是会忘记一些 所以用于记录

笔记对应视频为黑马redis

https://www.bilibili.com/video/BV1Pu411Y7bq

单点redis的问题 :

  1. 数据丢失问题 持久化
  2. 并发能力弱 主从集群
  3. 存储能力问题 ES
  4. 故障恢复问题 哨兵 健康监测 恢复 (此类不做了解)

所有例子采用的是win10的redis linux其实同理 环境搭建比较费事主要用于记录解决方案

使用的redis版本 Redis-6.0.17-Windows-x64

存储机制

RDB

RDB 全程为redis database backupfile 就是使用线程将内存中的数据记录到磁盘中 当做redis案例故障重启后 从磁盘读取的快照文件 用于恢复数据 默认是保存在当前目录

shell 复制代码
save 使用主进程执行RDB

bgsave是使用子线程执行rdb

当redis主线程停止的时候 会默认的执行一次RDB

默认情况下 redis只有在结束主线程之前才会执行一次rdb 但是如果出现宕机数据就会出现丢失

配置定时RDB

我们可以通过配置文件的配置项 来设置多少时间内有多少数据变动来触发rdb

这是redis的默认出发设置

我们也可以通过 dir来设置文件存储的位置 不推荐开启压缩 因为cpu资源更加宝贵

bgsave

开始的时候会fork主进程到子进程 子进程共享内存数据 完成之后读取内存数据到RDB文件

RDB缺点
  • RDB执行时间长 可能存在数据丢失风险
  • 子进程压缩和写出比较耗时

AOF

Append Only File Redis处理的每一个写命令都会记录在AOF文件中 可以当做命令日志文件,如果redis出现了故障 恢复的时候就读取日志文件恢复

AOF默认是关闭的 我们需要去配置打开

aof 有三种频率 自上向下

  • 每执行一次就存
  • 写命令执行完先放入缓冲区 一秒一秒的写入 最多丢失1秒的数据
  • 执行完命令直接放入缓冲区 由系统决定什么时候写到磁盘

性能对比:

使用

AOF文件的缺点

AOF占用的硬盘体积会比RDB大很多很多 因为AOF记录的是写命令 如果修改的key重复那么会多出很多无意义的记录

可以通过 执行 bgrewriteaof命令来让AOF执行重写功能 用最少的命令达到相同的记录效果

虽然变成了乱码 但是可以从一些片面的信息看到我们的key和一些值

redis给我们提供了配置 可以设置 AOF文件大于一定体积的时候就执行一次bgrewriteaof命令来最大限度的提升使用效率 分别是

  • 根据上次文件的体积
  • 根据固定的大小

对比

主从架构

主从架构是用来提升redis的并发上限的 主从之间会同步数据来达到承载更多数据压力的效果, 主节点来执行写操作 从节点来执行读操作就可以提升上限

这次根据教程的例子 我们搭建一主二从

  • 7001 master
  • 7002 slave
  • 7003 slave

架构搭建

恢复配置 关闭 aof 开启 rdb 创建三个文件夹 每一个redis实例都需要自己的配置文件

创建完毕后将 redis.conf复制到每一个目录 然后修改端口号

我们配置主从可以使用 replicaof或者slaveof命令 来使用

也可以使用配置文件的方式来完成主从绑定

启动所有实例

配置主从的命令如下:

复制代码
SLAVEOF 主节点的ip 主节点的端口

这样主从的配置就配置好了 , 我们可以使用 INFO REPLICATION命令来查看主从信息

我们在主节点写入 所有的从节点都可以查询到数据

数据同步原理

主从数据的第一次同步 是全量的同步 ,交流信息校验过程如下:

而主从之间的同步需要使用 RDB 文件这也是为什么配置架构的时候我们需要打开RDB

master持有数据集id这个id具有唯一性 对应着一个数据集 所有slave都回去继承这个repid,

主机通过偏移量来确认主从同步的数据是否一致 ,所以slave同步时需要将repid和偏移量体提交给master来判断数据的同步容量,

主从之间的增量同步 : 如果主从之间的断开时间太多 slave和master差距太大 就只能全量同步了,如果没有超出设定的范围则根据偏移量来完成增量同步

数据同步优化原理

  • 在主节点中配置启用无磁盘复制 REPL-DISKLESS-SYNC 避免全量同步时磁盘io的占用 尽可能减少全量同步
  • 我们可以适当的提高 repl-baklog的大小 增加缓冲区 及时的恢复宕机的slave
  • 如果主节点压力太大 slave太多 可以采用链式的方法来降低各个主节点的压力
相关推荐
得意霄尽欢2 小时前
Redis之底层数据结构
数据结构·数据库·redis
hsjkdhs2 小时前
MySQL 数据类型与运算符详解
数据库·mysql
吐泡泡_3 小时前
Redis(集群)
redis
爱吃烤鸡翅的酸菜鱼3 小时前
【Redis】常用数据结构之Hash篇:从常用命令到使用场景详解
数据结构·数据库·redis·后端·缓存·哈希算法
Pretend° Ω3 小时前
LRU缓存详解:用C语言实现高效数据管理
运维·c语言·spring·缓存·lru·双向链表
李少兄3 小时前
IntelliJ IDEA 启动项目时配置端口指南
数据库·sql·intellij-idea
NineData4 小时前
NineData云原生智能数据管理平台新功能发布|2025年8月版
数据库·mongodb·云原生·数据库管理工具·ninedata·数据库迁移·数据复制
白云如幻4 小时前
【Java】QBC检索和本地SQL检索
java·数据库·sql
勘察加熊人5 小时前
python将pdf转txt,并切割ai
数据库·python·pdf
不良人天码星5 小时前
Redis单线程模型为什么快?
数据库·redis·缓存