Redis 主从同步与对象模型(四)

news2025/5/13 0:20:39

目录

1.淘汰策略

1.1 expire/pexpire(设置键的过期时间)

1.2 配置

1.maxmemory

2.maxmemory-policy

3.maxmemory-samples

2.持久化

2.1背景

2.2 fork 的写时复制机制

2.3 大 key

3.持久化方式

3.1 aof(Apped Only File)

3.2 aof-rewrite

3.3 rdb(Redis DataBase)

3.4 rdb-aof 混用

3.5 大 key 对持久化影响

4.高可用

4.1 redis 主从复制

 4.2 哨兵模式

4.3Redis cluster集群


1.淘汰策略

redis 是内存数据库

1.1 expire/pexpire(设置键的过期时间)
命令说明
EXPIRE  key  seconds设置 key 在 seconds 秒后过期
PEXPIRE  key milliseconds设置 key 在 milliseconds 毫秒后过期
TTL key /  PTTL  key查看 key 剩余过期时间
PERSIST  key移除 key 的过期时间,使其永久存在
1.2 配置
1.maxmemory
  • 设置 Redis 最大可用内存限制
  • 单位支持 : bytes,kb,mb,gb
  • 例如:   maxmemory   4gb
2.maxmemory-policy
策略含义
noeviction不删除任何数据,写操作会报错
allkeys-lru所有 key 中,淘汰最近最少使用的 key
volatile-lru仅在设置了过期时间的 key 中,淘汰最近最少使用的
allkeys-random所有 key 中,随机选择 key 进行淘汰
volatile-random仅在设置了过期时间的 key 中,随机淘汰
allkeys-lfu所有 key 中,淘汰使用频率最低的 key
volatile-lfu仅在设置了过期时间的 key 中,淘汰使用频率最低的
volatile-ttl仅在设置了过期时间的 key 中,淘汰即将过期的 key

 注:volatile 策略只作用于设置了过期时间的键

        allkeys 策略作用于所有的键

3.maxmemory-samples

        在执行策略时,从样本中采样,然后从中选出最符合淘汰机制的key

例如: 设置allkeys-lru,并设定  maxmemory-samples 10

Redis 会从所有 key 中随机采样 10 个,然后选出最近最少访问的那个key来淘汰


2.持久化

2.1背景

        redis是内存数据库,重启需要加载回来原来的数据

2.2 fork 的写时复制机制

        为了提高效率而采用的一种延迟复制优化策略

父子进程最初共享同一块物理内存,只有当任一方尝试修改内存时,才会复制对应页到新的物理内存,从而实现真正的“独立”

父进程对数据修改,触发写保护中断,从而进行物理内存的复制,父进程的页表指向新的物理内存(谁修改谁指向新的物理内存)

发生写操作时候才会去复制物理内存
避免物理内存复制时间过长导致父进程长时间阻塞

2.3 大 key

        占用内存较大或成员数量非常多的 Key,比如 v 中存储的时 hash 或者 zset 这种数量比较多的类型


3.持久化方式
3.1 aof(Apped Only File)

        AOF持久化通过记录服务器所执行的所有写操作命令来记录数据库状态。这些命令会被追加到AOF文件的末尾,支持:

  • always:每次写命令都会同步(sync)写入到磁盘
  • everysec:每秒将aof缓冲区内容同步到磁盘中(由后台线程执行,是默认的方式)
  • no:Redis 只负责写入 aof 缓存,不主动同步到磁盘,由系统决定同步或手动同步

优点:

  • 数据更安全
  • 命令可读,易于恢复/调试

缺点:

  • 文件体积大,性能开销高于 rdb
  • 数据存在一定冗余
3.2 aof-rewrite

        处理 aof 文件过大,减少 aof 数据恢复速度过慢

工作原理:

        fork进程,根据内存数据生成 aof 文件,避免同一个 key 历史冗余,在重写 aof 期间,对 redis 的写操作记录到重写缓存区,当重写 aof 结束后,附加到 aof 文件末尾

3.3 rdb(Redis DataBase)
  • 周期性将内存数据写入磁盘(.rdb文件)
  • 通过 fork 子进程来执行,不影响主线程
  • rdb 存储的是经过压缩的二进制数据

优点:

文件小,恢复速度块

缺点:

有数据丢失的风险(最近一次快照之后的修改会丢失)

3.4 rdb-aof 混用

通过 fork 子进程,根据内存数据生成 rdb 文件,在rdb持久化期间,对redis 的写操作记录到重写缓冲区,当rdb 持久化结束后,附加到 aof 文件末尾

对比项RDB(快照)AOF(追加日志)
方式定时保存内存数据的快照每次写操作记录命令到日志文件
触发时机定时或手动触发每次写命令(可配置是否每次/fsync)
启动恢复时间快(直接加载快照)慢(需要回放全部命令)
数据完整性可能丢失几分钟数据最多丢失1秒(默认 everysec)
文件大小紧凑、体积小文件可能较大,命令多会膨胀
性能影响运行中 fork 子进程保存快照,影响小持续写磁盘,影响相对大
可读性二进制文件,不可读文本命令,可直接读懂、重放
使用场景数据量大,恢复速度优先数据安全要求高的业务
3.5 大 key 对持久化影响
  • 对 RDB:fork 期间,写时复制(COW)会导致 内存急剧增长
  • 对 AOF:每次修改都写入完整命令,大 key 会让文件迅速膨胀,AOF 重写成本高
  • 会导致重启时间变长,甚至服务阻塞

4.高可用

4.1 redis 主从复制
  •  异步复制:主节点将写操作同步到从节点,但不是实时同步(存在数据延迟)。
  • 环形缓冲区:主节点维护一个固定大小的缓冲区保存最近的写命令,用于断线后快速增量同步。
  • 复制偏移量:主从节点维护一个偏移量,表示同步的数据位置,用于比对是否需要全量(主从节点之间的数据全部重新同步的过程)或增量复制(主从节点之间同步断开期间 丢失的数据部分补充同步,无需全量)。
  • runid:每个 Redis 实例有唯一运行 ID,复制过程中标识主节点身份。

作用:

  • 解决了单点故障
  • 高可用性的基础
 4.2 哨兵模式

        目的:实现 Redis 故障自动转移。仅仅保障了单节点的高可用(主节点宕机可自动切换,从节点提升为主)

流程:

  1. 主观下线:
  2. 客观下线
  3. 烧饼选举
  4. 从库选主
  5. 故障转移

如何使用

 一个 Redis 哨兵(Sentinel)模式的配置与使用示例,包含:

  • 1 个主节点(master)
  • 2 个从节点(slave)
  • 3 个哨兵(sentinel)
  • 1 个客户端访问配置方式

 1.主从配置

#主节点 redis-master.conf(6379)
port 6379
dir /data/redis/master
appendonly yes

#从节点 redis-slave1.conf(6380)
port 6380
dir /data/redis/slave1
replicaof 127.0.0.1 6379
appendonly yes

#从节点 redis-slave2.conf(6381)
port 6381
dir /data/redis/slave2
replicaof 127.0.0.1 6379
appendonly yes

 2.哨兵配置(sentinel.conf)
每个哨兵配置几乎一样,只需修改端口和自身 IP

#哨兵1 sentinel1.conf(26379)
port 26379
dir /data/redis/sentinel1
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1
#其他两个哨兵只改端口和目录,比如:
sentinel2.conf: 端口 26380,目录 /data/redis/sentinel2
sentinel3.conf: 端口 26381,目录 /data/redis/sentinel3

 3.启动
放到一个文件比如start下面,然后chmod +x,最后./start

# 启动主从
redis-server redis-master.conf
redis-server redis-slave1.conf
redis-server redis-slave2.conf

# 启动哨兵
redis-sentinel sentinel1.conf
redis-sentinel sentinel2.conf
redis-sentinel sentinel3.conf

缺点:

  • 主观宕机存在误判风险
  • 部署麻烦
  • 没有避免数据丢失问题
  • 没有数据扩展
4.3Redis cluster集群

        去中心化结构,每个节点互相通信,无集中式主控节点,解决了数据扩展

特征:

  • 客户端与服务端缓存槽位信息,以服务器为主,客户节点缓存主要为了避免连接切换
  • 自动分片,16384(2^14)个哈希槽分配给不同节点
  • 每个主节点可挂载一个或多个从节点实现高可用

流程:

  1. 客户端根据 key 计算哈希槽值。
  2. 连接对应槽所属的主节点。
  3. 若节点不对,返回 MOVED 重定向信息,客户端重新连接目标节点

缺点:

  1. 不支持多 key 操作跨槽执行(除非通过 hash tags)。
  2. 集群节点间通讯复杂,部署维护成本高。
  3. 客户端需支持 Redis Cluster 协议

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

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

相关文章

Linux系列:如何用perf跟踪.NET程序的mmap泄露

一:背景 1. 讲故事 如何跟踪.NET程序的mmap泄露,这个问题困扰了我差不多一年的时间,即使在官方的github库中也找不到切实可行的方案,更多海外大佬只是推荐valgrind这款工具,但这款工具底层原理是利用模拟器&#xff…

如何租用服务器并通过ssh连接远程服务器终端

这里我使用的是智算云扉 没有打广告 但确实很便宜 还有二十小时免费额度 链接如下 注册之后 租用新实例 选择操作系统 选择显卡型号 点击租用 选择计费方式 选择镜像 如果跑深度学习的话 就选项目对应的torch版本 没有的话 就创建纯净的cuda 自己安装 点击创建实例 创建之后 …

华为设备链路聚合实验:网络工程实战指南

链路聚合就像为网络搭建 “并行高速路”,既能扩容带宽,又能保障链路冗余,超实用! 一、实验拓扑速览 图中两台交换机 LSW1 和 LSW2,PC1、PC2 归属 VLAN 10,PC3 归属 VLAN 30。LSW1 与 LSW2 通过 GE0/0/1、…

AUTOSAR图解==>AUTOSAR_TR_AIDesignPatternsCatalogue

AUTOSAR 人工智能设计模式目录 AUTOSAR传感器执行器与仲裁设计模式的深入解析与图解 目录 简介传感器和执行器模式 架构概述组件结构交互流程应用场景 多请求者或提供者之间的仲裁模式 架构概述组件结构仲裁流程应用场景 总结 1. 简介 AUTOSAR(AUTomotive Open Sy…

双系统电脑中如何把ubuntu装进外接移动固态硬盘

电脑:win11 ubuntu22.04 实体机 虚拟机:VMware17 镜像文件:ubuntu-22.04.4-desktop-amd64.iso 或者 ubuntu20.4的镜像 外接固态硬盘1个 一、首先win11中安装vmware17 具体安装方法,网上很多教程 二、磁盘分区 1.在笔…

【C语言】程序的预处理,#define详解

一、预定义符号 二、#define 1.#define定义标识符 #define + 自定义名称 + 代替的内容 例: #define MAX 100 #define CASE break;case #define CASE break;caseint main() {int n 0;switch (n){case 1:CASE 2:CASE 3:CASE 4:}return …

NVM完全指南:安装、配置与最佳实践

发布于 2025年5月7日 • 阅读时间:10分钟 💡 TL;DR: 本文详细介绍了如何完整卸载旧版Node.js,安装NVM,配置阿里云镜像源,以及设置node_global与node_cache目录,打造高效Node.js开发环境。 📋 目…

(二)毛子整洁架构(CQRS/Dapper/领域事件处理器/垂直切片)

文章目录 项目地址一、Application 层1.1 定义CQRS的接口以及其他服务1. Command2. IQuery查询3. 当前时间服务接口4. 邮件发送服务接口 1.2 ReserveBooking Command1. 处理传入的参数2. ReserveBookingCommandHandler3. BookingReservedDomainEvent 1.3 Query使用Sql查询1. 创…

如何修改MySQL数据库密码

文章目录 一、忘记数据库密码该如何修改1. 关闭数据库的服务2.跳过安全检查3. 重置密码4.查询用户是否存在5.退出验证密码是否正确 二、未忘记密码该如何修改密码1.直接修改密码2.登录mysql 时间久了,忘记数据库密码了。。。。。 一、忘记数据库密码该如何修改 1. …

【Python】mat npy npz 文件格式

1、简介 MAT 文件和 NP(.npy 或 .npz)文件是两种不同的格式,用于存储数组数据。它们分别由 MATLAB 和 NumPy 开发,主要用于各自环境中的数据存储和交换。以下是这两种格式的主要区别: 1.1 格式和用途 MAT 文件&…

SpringBoot快速入门WebSocket(​​JSR-356附Demo源码)

现在我想写一篇Java快速入门WebSocket,就使用 JSR-356的websocket,我想分以下几点, 1. websocket介绍, 1.1 介绍 什么是WebSocket?​​ WebSocket 是一种基于 ​​TCP​​ 的​​全双工通信协议​​,允许客户端和服务器在​​单个长连接​​上实…

【安装配置教程】ubuntu安装配置Kodbox

目录 一、引言 二、环境配置 1. 服务器配置​ 2. 必备组件​ 三、安装基础环境​ 1. 安装 PHP 8.1 及扩展​ 2. 安装 MySQL 数据库 3.安装 Redis(可选,提升缓存性能) 4. 配置nginx文件 4.1. 创建 Kodbox 站点目录​ 4.2. 编写 Ng…

LabVIEW车牌自动识别系统

在智能交通快速发展的时代,车牌自动识别系统成为提升交通管理效率的关键技术。本案例详细介绍了基于 LabVIEW 平台,搭配大恒品牌相机构建的车牌自动识别系统,该系统在多个场景中发挥着重要作用,为交通管理提供了高效、精准的解决方…

c语言第一个小游戏:贪吃蛇小游戏01

hello啊大家好 今天我们用一个小游戏来增强我们的c语言! 那就是贪吃蛇 为什么要做一个贪吃蛇小游戏呢? 因为这个小游戏所涉及到的知识有c语言的指针、数组、链表、函数等等可以让我们通过这个游戏来巩固c语言,进一步认识c语言。 一.我们先…

[项目总结] 抽奖系统项目技术应用总结

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

机器视觉的平板电脑屏幕组件覆膜应用

在现代智能制造业中,平板电脑屏幕组件覆膜工序是确保产品外观和功能完整性的重要环节。随着技术的进步,传统的覆膜方式已经无法满足高速度、高精度的生产需求。而MasterAlign视觉系统的出现,将传统覆膜工艺转变为智能化、自动化的生产流程。在…

更换内存条会影响电脑的IP地址吗?——全面解析

在日常电脑维护和升级过程中,许多用户都会遇到需要更换内存条的情况。与此同时,不少用户也担心硬件更换是否会影响电脑的网络配置,特别是IP地址的设置。本文将详细探讨更换内存条与IP地址之间的关系,帮助读者理解这两者之间的本质…

VMware安装CentOS Stream10

文章目录 安装下载iso文件vmware安装CentOS Stream创建新虚拟机安装CentOS Stream10 安装 下载iso文件 官方地址:跳转链接 vmware安装CentOS Stream 创建新虚拟机 参考以下步骤 安装CentOS Stream10 指定ISO文件 开启虚拟机选择Install CentOS Stream 10 鼠…

基于Dify实现对Excel的数据分析

在dify部署完成后,大家就可以基于此进行各种应用场景建设,目前dify支持聊天助手(包括对话工作流)、工作流、agent等模式的场景建设,我们在日常工作中经常会遇到各种各样的数据清洗、格式转换处理、数据统计成图等数据分…

资产月报怎么填?资产月报填报指南

资产月报是企业对固定资产进行定期检查和管理的重要工具,它能够帮助管理者了解资产的使用情况、维护状况和财务状况,从而为资产的优化配置和决策提供依据。填写资产月报时,除了填报内容外,还需要注意格式的规范性和数据的准确性。…