Redis 主从同步与对象模型(四)
目录
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 故障自动转移。仅仅保障了单节点的高可用(主节点宕机可自动切换,从节点提升为主)
流程:
- 主观下线:
- 客观下线
- 烧饼选举
- 从库选主
- 故障转移
如何使用
一个 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)个哈希槽分配给不同节点
- 每个主节点可挂载一个或多个从节点实现高可用
流程:
- 客户端根据 key 计算哈希槽值。
- 连接对应槽所属的主节点。
- 若节点不对,返回 MOVED 重定向信息,客户端重新连接目标节点
缺点:
- 不支持多 key 操作跨槽执行(除非通过 hash tags)。
- 集群节点间通讯复杂,部署维护成本高。
- 客户端需支持 Redis Cluster 协议
相关文章:

Redis 主从同步与对象模型(四)
目录 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)…...

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

如何租用服务器并通过ssh连接远程服务器终端
这里我使用的是智算云扉 没有打广告 但确实很便宜 还有二十小时免费额度 链接如下 注册之后 租用新实例 选择操作系统 选择显卡型号 点击租用 选择计费方式 选择镜像 如果跑深度学习的话 就选项目对应的torch版本 没有的话 就创建纯净的cuda 自己安装 点击创建实例 创建之后 …...
Git的核心作用详解
一、版本控制与历史追溯 Git作为分布式版本控制系统,其核心作用是记录代码的每一次修改,形成完整的历史记录。通过快照机制,Git会保存每次提交时所有文件的完整状态(而非仅记录差异),确保开发者可以随时回…...

华为设备链路聚合实验:网络工程实战指南
链路聚合就像为网络搭建 “并行高速路”,既能扩容带宽,又能保障链路冗余,超实用! 一、实验拓扑速览 图中两台交换机 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…...
linux基础操作4------(权限管理)
一.前言 今天我们来讲讲linux的权限管理,比如文件的权限,如果大家看过前面说的app逆向的frida,我们在手机里要给frida,我们都要设置一下chomd 777 frida ,这样就给了可执行权限,这就是这一章要讲的&#x…...

双系统电脑中如何把ubuntu装进外接移动固态硬盘
电脑:win11 ubuntu22.04 实体机 虚拟机:VMware17 镜像文件:ubuntu-22.04.4-desktop-amd64.iso 或者 ubuntu20.4的镜像 外接固态硬盘1个 一、首先win11中安装vmware17 具体安装方法,网上很多教程 二、磁盘分区 1.在笔…...
Nacos源码—Nacos集群高可用分析(三)
6.CAP原则与Raft协议 (1)CAP分别指的是什么 一.C指的是一致性Consistency 各个集群节点之间的数据,必须要保证一致。 二.A指的是可用性Availability 在分布式架构中,每个请求都能在合理的时间内获得符合预期的响应。 三.P指的是分区容错性Partition To…...

【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. 创…...
基于大核感知与非膨胀卷积的SPPF改进—融合UniRepLK的YOLOv8目标检测创新架构
在当前目标检测领域中,YOLO系列模型因其优异的速度-精度平衡能力而被广泛部署于工业界与科研场景。YOLOv8作为该系列的最新版本,在主干网络与特征金字塔结构上进行了多项优化,进一步提升了其实时性与鲁棒性。然而,其核心组件—SPPF(Spatial Pyramid Pooling Fast)模块仍采用…...
基于SpringBoot网上书店的设计与实现
pom.xml配置文件 1. 项目基本信息(没什么作用) <groupId>com.spring</groupId> <!--项目组织标识,通常对应包结构--> <artifactId>boot</artifactId> <!--项目唯一标识--> <version>0.0.1-SNAPSHOT</ve…...
小程序多线程实战
在小程序开发中,由于微信小程序的运行环境限制,原生并不支持传统意义上的多线程编程,但可以通过以下两种核心方案实现类似多线程的并发处理效果,尤其在处理复杂计算、避免主线程阻塞时非常关键: 一、官方方案ÿ…...

如何修改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 的全双工通信协议,允许客户端和服务器在单个长连接上实…...
JDBC执行sql过程
1. 加载数据库驱动 JDBC 通过 驱动(Driver) 实现与不同数据库的通信。驱动需提前加载到 JVM: 手动加载(JDBC 4.0 前): Class.forName("com.mysql.cj.jdbc.Driver"); // MySQL 驱…...
VNC windows连接ubuntu桌面
✅ 步骤 1:安装 VNC 服务器 首先,我们需要在 Winux 系统上安装一个 VNC 服务器。这里我们使用 tigervnc 作为例子,它是一个常用的 VNC 服务器软件。 打开终端并更新你的软件包: sudo apt update安装 tigervnc 服务器:…...
CSS中的@import指令
一、什么是import指令? import 是CSS提供的一种引入外部样式表的方式,允许开发者在CSS文件中引入其他CSS文件,或者在HTML的<style>标签中引入外部样式。与常见的<link>标签相比,import 提供了一种更“CSS原生”的样式…...

【安装配置教程】ubuntu安装配置Kodbox
目录 一、引言 二、环境配置 1. 服务器配置 2. 必备组件 三、安装基础环境 1. 安装 PHP 8.1 及扩展 2. 安装 MySQL 数据库 3.安装 Redis(可选,提升缓存性能) 4. 配置nginx文件 4.1. 创建 Kodbox 站点目录 4.2. 编写 Ng…...
【软件设计师:数据库】13.数据库控制与安全
一、数据库语言SQL SQL是结构化查询语言(Structured Query Language)的缩写,其功能包括数据查询、数据操纵、数据定义和数据控制四个部分。 SQL 语言简洁、方便实用、功能齐全,已成为目前应用最广的关系数据库语言。SQL既是自含式语言(联机交互),又是嵌入式语言(宿主语…...

LabVIEW车牌自动识别系统
在智能交通快速发展的时代,车牌自动识别系统成为提升交通管理效率的关键技术。本案例详细介绍了基于 LabVIEW 平台,搭配大恒品牌相机构建的车牌自动识别系统,该系统在多个场景中发挥着重要作用,为交通管理提供了高效、精准的解决方…...
el-menu 折叠后小箭头不会消失
官方示例 <template><el-radio-group v-model"isCollapse" style"margin-bottom: 20px"><el-radio-button :value"false">expand</el-radio-button><el-radio-button :value"true">collapse</el-ra…...

c语言第一个小游戏:贪吃蛇小游戏01
hello啊大家好 今天我们用一个小游戏来增强我们的c语言! 那就是贪吃蛇 为什么要做一个贪吃蛇小游戏呢? 因为这个小游戏所涉及到的知识有c语言的指针、数组、链表、函数等等可以让我们通过这个游戏来巩固c语言,进一步认识c语言。 一.我们先…...
6. HTML 锚点链接与页面导航
在开发长页面或文档类网站时,锚点链接(Anchor Links)是一个非常实用的功能。通过学习 HTML 锚点技术,将会掌握如何在同一页面内实现快速跳转,以及如何优化长页面的导航体验。以下是基于给定素材的学习总结和实践心得 一、什么是锚点链接? 锚点链接(也称为页面内链接)允…...

[项目总结] 抽奖系统项目技术应用总结
🌸个人主页: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与…...
Axios替代品Alova
介绍alova | Alova.JS Multipart 实体请求 | Axios中文文档 | Axios中文网 1. 极致的轻量与性能 Tree-shaking优化:仅打包使用到的功能模块 零依赖:基础包仅 4KB(Axios 12KB) 2. 智能请求管理(开箱即用࿰…...
Python OpenCV性能优化与部署实战指南
在计算机视觉领域,OpenCV作为开源视觉库的标杆,其性能表现直接影响着从工业检测到AI模型推理的各类应用场景。本文结合最新技术趋势与生产实践,系统性梳理Python环境下OpenCV的性能优化策略与部署方案。 一、性能优化核心技术矩阵 1.1 内存…...