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
  • 配置读写分离
	@Beanpublic 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节点
  • 配置读写分离
	@Beanpublic LettuceClientConfigurationBuilderCustomizer customizer(){return clientConfigurationBuilder -> clientConfigurationBuilder.readFrom(ReadFrom.REPLICA_PREFERRED);}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio 2022之Release版本程序发送到其它计算机运行

目录 1、缺少dll​ 2、应用程序无法正常启动 3、This application failed to start because no Qt platform plugin could be initialized. 代码在Debug模式下正常运行&#xff0c;然后切换到Release模式下&#xff0c;也正常运行&#xff0c;把第三方平台的dll拷贝到exe所在…

现货大宗电子盘交易软件的核心功能代码

现货大宗电子盘交易软件的核心功能代码是高度复杂且专有的&#xff0c;通常涉及多个模块和组件&#xff0c;包括但不限于用户认证、交易撮合、订单管理、风险管理、市场数据展示等。由于这些系统通常是由专业的金融科技公司或软件开发商根据特定的业务需求和技术标准定制开发的…

在unity中生成一个随机数

1.首先建立一个画布和空对象 2.创建脚本并将代码复制进去 using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; public class suijishu : MonoBehaviour {public TextMeshProUGUI sjs;void Update(){if (Input.GetKeyDown(KeyCode.…

污水处理远程监控管理平台

随着城市化进程的加速和工业化的快速发展&#xff0c;污水处理成为了环境保护和可持续发展的重要环节。传统的污水处理监控方式往往依赖于现场巡查和人工记录&#xff0c;这种方式不仅效率低下&#xff0c;而且容易出现监控盲区&#xff0c;难以实现对污水处理过程的全面、实时…

Web框架开发-Django的视图层

一、视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以。无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓…

深入理解指针——C语言

目录 1. 内存和地址 2. 指针变量和地址 3. 指针变量类型的意义 4. const修饰指针 5. 指针运算 6. 野指针 7. assert断言 8. 指针的使用和传址调用 9. 数组名的理解 10. 使用指针访问数组 11. 一维数组传参的本质 12. 冒泡排序 13. 二级指针 14. 指针数组 15. 指…

Windows系统下载安装Emby结合内网穿透实现公网访问本地影音网站

文章目录 1.前言2. Emby网站搭建2.1. Emby下载和安装2.2 Emby网页测试 3. 本地网页发布3.1 注册并安装cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar内网穿透本地设置 4.公网访问测试5.结语 1.前言 在现代五花八门的网络应用场景中&#xff0c;观看视频绝对是主力应用场景之一&…

6.S081的Lab学习——Lab1: Xv6 and Unix utilities

文章目录 前言一、启动xv6(难度&#xff1a;Easy)解析&#xff1a; 二、sleep(难度&#xff1a;Easy)解析&#xff1a; 三、pingpong&#xff08;难度&#xff1a;Easy&#xff09;解析&#xff1a; 四、Primes(素数&#xff0c;难度&#xff1a;Moderate/Hard)解析&#xff1a…

Visual Basic6.0零基础教学(3)—焦点概念和深入学习属性

焦点概念和深入学习属性 文章目录 焦点概念和深入学习属性前言一、什么是焦点(Focus)?焦点的特点 二、窗体属性一、窗体的结构二、窗体的属性三、事件四、方法 一.控件属性一. 标签 Label二.文本框 TextBox2.常用事件 三.命令按钮事件 总结 前言 今天我们来继续学习VB中的属性…

服务器数据恢复—raid5热备盘上线同步数据失败的如何恢复数据

服务器数据恢复环境&故障&分析&#xff1a; 一台存储上有一组由多块硬盘组建的raid5阵列&#xff0c;该raid5阵列中的一块硬盘掉线&#xff0c;热备盘自动上线同步数据的过程中&#xff0c;raid阵列中又有一块硬盘掉线&#xff0c;热备盘的数据同步被中断&#xff0c;r…

Linux中判断某个Docker容器服务的内存是否超过临界值,比如到达10G,则在凌晨4点执行定时任务执行重新构建命令

监测NAME是blade-jiangxinzhougarden的服务&#xff0c;如果内存&#xff08;MEM USAGE&#xff09;超过10G则在凌晨4点执行重新构建命令 1.编写脚本文件restart_jxz.sh #!/bin/bash# 设置要监控的容器名称或服务名称(替换成你的服务名) SERVICE_NAME"blade-jiangxinzhou…

科研学习|论文解读——指导关键词组提取的局部词向量

原文标题 Local word vectors guiding keyphrase extraction 摘要 自动关键词组提取是一项基本的文本信息处理任务&#xff0c;涉及到从文件中选择具有代表性的短语来概括其内容。这项工作提出了一种新的无监督的关键词组提取方法&#xff0c;其主要创新点是使用局部词嵌入(特别…