Redis持久化和集群

redis持久化


RDB方式

Redis Database Backup file (redis数据备份文件), 也被叫做redis数据快照. 简单来说就是把内存中的所有数据记录到磁盘中.
快照文件称为RDB文件, 默认是保存在当前运行目录.

[root@centos-zyw ~]# docker exec -it redis redis-cli
127.0.0.1:6379> save  # 由redis主进程来执行RDB, 会阻塞所有命令
OK
127.0.0.1:6379> bgsave 	# 开启子进程执行RDB, 避免主进程受到影响
Background saving started
127.0.0.1:6379> 

bgsave开始时会fork主进程得到子进程,子进程共享主进程的内存数据. 完成fork后读取内存数据并写入RDB文件.
fork采用的copy-onwrite技术:

  • 当主进程执行读操作时, 访问共享内存
  • 当主进程执行写操作时, 则会拷贝一份数据, 执行写操作.
  • redis.conf文件配置
# 900秒内,如果至少一个key被修改,则执行bgsave, 如果是save "" 则表示禁用RDB
save 900 1
save 300 10
save 60 10000
# 是否压缩
rdbcompression yes
# RDB文件名称
dbfilename dump.rdb
# 文件保存的路径目录
dir ./

AOF方式

AOF全称Append Only File. redis处理的每一个写命令都会记录在AOF文件, 可以看做是命令日志记录文件.

  • redis.conf配置
# 开启AOF功能, 默认no
appendonly yes
# AOF文件的名称
appendfilename "appendonly.aof"
# 表示每执行一次写命令,立即记录到AOF文件
appendfsync always
# 写命令执行完先放入AOF缓冲区, 然后表示每嗝1秒将缓冲区写到AOF文件,是默认方案
appendfsync everysec
# 写命令执行完先放入AOF缓冲区, 有操作系统决定何时将缓冲区内容写回磁盘
appendfsync no

在这里插入图片描述
bgrewriteaof 可以让AOF文件执行重写功能, 用最少的命令达到相同效果

  • redis.conf配置
# AOF文件比上次文件,增长超过多少百分比则触发重写
auto-aof-rewrite-percentage 100
# AOF文件体积最小多大以上触发重写
auto-aof-rewrite-min-size 64mb

RDB和AOF对比

在这里插入图片描述

redis集群


主从集群

在这里插入图片描述
启动三个redis服务

  • 在从节点执行slaveof命令 --5.0后新增replicaof 两命令效果一致
  • 执行命令为临时生效,重启后失效, 永久方式是将命令配置在redis.conf文件
# 连接 7002
redis-cli -p 7002
# 执行slaveof
slaveof 192.168.150.101 7001

备注: 取消主从关系 slaveof no one

  • 在主节点查看集群信息
# 连接 7001
redis-cli -p 7001
# 查看状态
info replication

优化

  • 在master的redis.conf文件中配置repl-diskless-sync启用无磁盘复制,避免全量同步时的磁盘IO
  • redis单节点上的内存占用不要太大, 减少RDB导致的过多磁盘IO
  • 适当提高repl_baklog的大小,发现slave宕机尽快实现故障恢复,尽可能避免全量同步
  • 限制一个master上的slave节点数量,如果实在是太多slave,则可以采用主-从-从链式结构,减少master压力
repl-diskless-sync yes

哨兵集群

在这里插入图片描述

创建sentinel.conf文件

port 27001
sentinel announce-ip 192.168.150.101
sentinel monitor mymaster 192.168.150.101 7001 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
dir "/tmp/s1"

sentinel monitor mymaster 192.168.150.101 7001 2中mymaster为主节点名字, 2为选举master时的quorum值,当主节点挂了,2个sentinel认为你挂了,就选新的主节点,一般为sentinel的一半
dir为sentinel.conf所在的目录

运行sentinel

复制三份sentinel.conf,修改相应配置,启动三个sentinel服务

redis-sentinel s1/sentinel.conf

RestTemplate的哨兵模式

Spring的RedisTemplate底层利用lettuce实现了节点的感知和自动切换

  • 引入依赖
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
  • 配置application.yml
spring:
  data:
    redis:
      sentinel:
        master: mymaster # 指定master名称
        nodes: # 指定redis-sentinel集群信息
          - 127.0.0.1:27001
          - 127.0.0.1:27002
          - 127.0.0.1:27003
  • 配置读写分离
	@Bean
    public LettuceClientConfigurationBuilderCustomizer customizer(){
        return clientConfigurationBuilder -> clientConfigurationBuilder.readFrom(ReadFrom.REPLICA_PREFERRED);
    }

在这里插入图片描述

分片集群

分片集群结构

可以解决的问题

  • 海量数据存储问题
  • 高并发写的问题

特点:

  • 集群中有多个master,每个master保存不同数据
  • 每个master都可以有多个slave节点
  • master之间通过ping检测彼此健康状态
  • 客户端请求可以访问集群任意节点,最终都会被转发到正确节点

搭建

  • 创建redis.conf
port 6379
# 开启集群功能
cluster-enabled yes
# 集群的配置文件名称,不需要我们创建,由redis自己维护
cluster-config-file /tmp/6379/nodes.conf
# 节点心跳失败的超时时间
cluster-node-timeout 5000
# 持久化文件存放目录
dir /tmp/6379
# 绑定地址 0.0.0.0 -> 任何人可访问
bind 0.0.0.0
# 让redis后台运行
daemonize yes
# 注册的实例ip
replica-announce-ip 192.168.150.101
# 保护模式
protected-mode no
# 数据库数量
databases 1
# 日志
logfile /tmp/6379/run.log
  • 启动
redis-server redis.conf
  • 建立节点关系
redis-cli --cluster create --cluster-replicas 1 192.168.150.101:7001 192.168.150.101:7002 192.168.150.101:7003 192.168.150.101:8001 192.168.150.101:8002 192.168.150.101:8003

说明:

--cluster-replicas 1:指定集群中每个master的副本个数为1,此时节点总数 ÷ (replicas + 1) 得到的就是master的数量。因此节点列表中的前n个就是master,其它节点都是slave节点,随机分配到不同master

  • 查看集群状态
redis-cli -p 7001 cluster nodes
  • 操作集群需要加-c参数
redis-cli -c -p 7001

散列插槽

redis会把每一个master节点映射到0~16383共16384个插槽上
在这里插入图片描述

数据key不是与节点绑定,而是与插槽绑定. redis会根据key的有效部分计算插槽值

  • key中包含{}{}中至少包含1个字符,{}中的部分是有效部分
  • key中不包含{},整个key都是有效部分
    例如{apper}num,则根据apper计算. 计算方式是利用CRC16算法得到一个hash值, 对16384取余,得到的结果就是slot值.

集群伸缩

  • 新启动一个redis服务, 加入到集群
# 7008加入到集群
redis-cli --cluster add-node 192.168.0.112:7008  192.168.0.112:7001

在这里插入图片描述

  • 移动插槽
redis-cli --cluster reshard 192.168.0.112:7002

在这里插入图片描述

  • 指定移动的插槽数

在这里插入图片描述
含义: 从7001移动100个插槽到7008上

  • 输入done开始

在这里插入图片描述

  • 移动结束

在这里插入图片描述

  • 查看最终结果

在这里插入图片描述
补充: 从集群中剔除节点

# 剔除7008节点 后面为7008节点id
redis-cli --cluster del-node 192.168.0.112:7008 2c45c64249535a46004f2a5009c4c2eb11e65868

故障转移

  • 模拟宕机
# 关闭7002节点
redis-cli -p 7002 shutdown
  • 节点会标记为fail

在这里插入图片描述

  • 数据迁移 - 主从切换

在这里插入图片描述
进入slave节点,执行cluster failover
在这里插入图片描述

RedisTemplate访问分片集群

  • 引入依赖
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
  • application.yml文件
spring:
  data:
    redis:
      cluster:
        nodes:
          - 192.168.0.112:7001  # master节点
          - 192.168.0.112:7002  # master节点
          - 192.168.0.112:7003  # master节点
          - 192.168.0.112:7004  # slave节点
          - 192.168.0.112:7005  # slave节点
          - 192.168.0.112:7006  # slave节点
  • 配置读写分离
	@Bean
    public LettuceClientConfigurationBuilderCustomizer customizer(){
        return clientConfigurationBuilder -> clientConfigurationBuilder.readFrom(ReadFrom.REPLICA_PREFERRED);
    }

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

供应IMX290LQR-C芯片现货

长期供应各品牌芯片现货&#xff0c;SONY索尼SONY索尼CMOS/CCD芯片全系列全新现货优势出&#xff1a; IMX225LQR-C IMX415-AAQR-C IMX290LQR-C imx273llr-C IMX397CLN-C IMX637-AAMJ-C IMX647-AAMJ-C IMX991-A***-C IMX991-AABJ-C IMX287LLR-C IMX287LQR-C IMX297L…

Pygame教程06:Event事件的类型+处理方法+监听鼠标事件

------------★Pygame系列教程★------------ Pygame教程01&#xff1a;初识pygame游戏模块 Pygame教程02&#xff1a;图片的加载缩放旋转显示操作 Pygame教程03&#xff1a;文本显示字体加载transform方法 Pygame教程04&#xff1a;draw方法绘制矩形、多边形、圆、椭圆、弧…

「璞华精选」品牌展区成为亮点,引领海外优质生活新潮流!

展会概况 3月07-09日&#xff0c;CCF 2023上海春季百货展在上海新国际博览中心圆满收官。以“聚焦品牌引流行业”为定位目标的CCF上海国际日用百货&#xff08;春季&#xff09;博览会&#xff0c;立足上海&#xff0c;辐射全球商贸&#xff0c;链接行业市场全局&#xff0c;赋…

mysql数据库中查询重复数据和去重数据

文章目录 1.查找重复数据2. 查到重复组的唯一数据3.删除重复数据4.注意重复的内容和删除的记录数是否一致 1.查找重复数据 select gene_entrez_id,count(*) a from diag_gene GROUP BY gene_entrez_id HAVING a > 12. 查到重复组的唯一数据 原理 分组后如果组内多个数据…

地下管网的“守门员”:智能井盖监控器

井盖&#xff0c;作为城市道路上的关键组成部分&#xff0c;其重要性不言而喻。一旦井盖未能得到妥善安装或及时维护&#xff0c;可能会引发一系列安全问题。井盖可能会开盖、松动或移位&#xff0c;这些状况不仅构成了交通隐患&#xff0c;还可能导致地下管网的损坏&#xff0…

SpringBoot(静态资源访问+Rest风格请求)

文章目录 1.静态资源访问1.基本介绍2.快速入门1.新建一个maven项目2.引入依赖 pom.xml3.创建文件目录4.Application.java5.创建四个可以存放静态资源的文件夹6.通过浏览器访问&#xff08;这四个都可以访问&#xff09; 3.注意事项和细节1.关于静态资源的访问管理2.修改静态资源…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的癌症图像检测系统(深度学习模型+UI界面代码+训练数据集)

摘要&#xff1a;本篇博客深入介绍了如何借助深度学习技术开发癌症图像检测系统&#xff0c;以提高医疗诊断的精度和速度。系统基于先进的YOLOv8算法&#xff0c;并对比分析了YOLOv7、YOLOv6、YOLOv5的性能&#xff0c;如mAP和F1 Score。详细解释了YOLOv8的原理&#xff0c;并附…

Restormer: Efficient Transformer for High-Resolution Image Restoration

Abstract 由于卷积神经网络&#xff08;CNN&#xff09;在从大规模数据中学习可概括的图像先验方面表现良好&#xff0c;因此这些模型已广泛应用于图像恢复和相关任务。最近&#xff0c;另一类神经架构 Transformer 在自然语言和高级视觉任务上表现出了显着的性能提升。虽然 T…

纯血鸿蒙来画龙!基于HarmonyOS ArkTS来操作SVG图片

大家好&#xff0c;龙年报喜&#xff0c;大地回春&#xff0c;作为程序员&#xff0c;以代码之名&#xff0c;表达对于龙年的祝福。本节将演示如何在基于HarmonyOS ArkTS的Image组件来实现画一条中国龙&#xff0c;祝大家“码”上“鸿”福到&#xff01; 创建应用 选择空模板…

多线程 - 技术面手撕代码(java)

编写一个程序&#xff0c;开启 3 个线程&#xff0c;这三个线程的 ID 分别为 A、B、C&#xff0c;每个线程将自己的ID 在屏幕上打印10 遍&#xff0c;要求输出的结果必须按顺序显示&#xff0c;如: ABCABCABC… public class Main {private static final Object lock new Obj…

【Python程序开发系列】介绍一款轻量级高自由度web框架-NiceGUI

这是我的第237篇原创文章。 一、引言 NiceGui 是一个轻量级的 Python 前端框架&#xff0c;旨在简化用户界面的创建。它侧重于提供简单、直观的界面&#xff0c;特别适用于小型项目和快速原型设计。 然而&#xff0c;NiceGui 并不是一个专为构建复杂项目而设计的框架。对于大型…

SAP ERP销售应收成本科目确定

一、概述 ERP作为业财一体软件,其中最核心的就是业务与财务模块的自动集成,无需财务进行手工做账,提高工作效率的同时降低人工操作产生的误差。今天浅浅的分享一下SD模块生成会计凭证时,借贷项确定的系统配置。一般项目上借贷项、科目都有FICO提供,但是具体的集成配置是在…

App 测试必备 - 建议所有测试人收藏!

移动端App性能测试需要关注多个方面&#xff0c;包括响应时间、稳定性、内存使用、CPU使用率、网络性能、电池消耗以及设备兼容性等。通过综合考虑这些方面&#xff0c;并在不同条件下进行全面的测试&#xff0c;可以确保应用程序在各种情况下都能够提供优质的用户体验&#xf…

软件测试中的AI-为什么它在软件自动化测试中很重要?

通俗地说&#xff0c;人工智能&#xff08;AI&#xff09;是计算机科学的一个领域&#xff0c;它专注于使机器“智能化”。所谓智能&#xff0c;就是使系统能够像人类一样学习和做出决策。因此&#xff0c;人工智能机器将能够学习如何在特定情况下做出反应&#xff0c;然后根据…

在 Android 上恢复已删除文件的 5 种简单方法

您可能会因为意外删除、未完成的 Android 更新、手机意外关机等原因而丢失 Android 上的重要数据。新技术的发展使许多手机功能或程序能够从内部恢复丢失的数据。 在 Android 上恢复已删除文件的 5 种简单方法 然而恢复成功率的不确定性也成为人们克服数据丢失困境的重要考虑因…

阿里云国际放行DDoS高防回源IP

如果源站服务器上设置了IP白名单访问控制&#xff08;如安全软件、安全组&#xff09;&#xff0c;由于设置了DDoS高防后&#xff0c;回源IP是高防回源IP段&#xff0c;您需要将DDoS高防的回源IP段的地址加入安全软件和安全组的白名单中&#xff0c;避免DDoS高防的回源流量被误…

springboot268码头船只货柜管理系统

码头船只出行和货柜管理系统的设计与实现 摘要 针对于码头船只货柜信息管理方面的不规范&#xff0c;容错率低&#xff0c;管理人员处理数据费工费时&#xff0c;采用新开发的码头船只货柜管理系统可以从根源上规范整个数据处理流程。 码头船只货柜管理系统能够实现货柜管理…

学生时期学习资源同步-1 第一学期结业考试题6

原创作者&#xff1a;田超凡&#xff08;程序员田宝宝&#xff09; 版权所有&#xff0c;引用请注明原作者&#xff0c;严禁复制转载

【深度学习实践】HaGRID,YOLOv5,手势识别项目,目标检测实践项目

文章目录 数据集介绍下载数据集将数据集转换为yolo绘制几张图片看看数据样子思考类别是否转换下载yolov5修改数据集样式以符合yolov5创建 dataset.yaml训练参数开始训练训练分析推理模型转换onnx重训一个yolov5s后记 数据集介绍 https://github.com/hukenovs/hagrid HaGRID&a…

推荐3款新发现的宝藏软件,全是黑科技,用起来超爽

Seer 对于熟悉macOS的用户来说&#xff0c;Quick Look功能无疑是一大便利&#xff0c;只需在Finder中轻按空格键&#xff0c;即可轻松预览大多数常见文件。 Seer 在Windows系统中&#xff0c;原生并没有提供类似的功能。幸运的是&#xff0c;有一些优秀的第三方软件能够填补这…
最新文章