⌛ 一文掌握:Redis的持久化 ROB+AOF

一、什么是Redid的持久化

Redis 的持久化是指将数据库中的数据保存到磁盘上的过程,以便在服务器重启或其他意外情况下能够恢复数据,Redis的数据是保存在内存中的,如果没有持久化,Redis宕机之后,数据就会丢失。

二、Redis安装:linux版

2.1先具备GCC编译环境

什么是GCC

GCC 是 GNU Compiler Collection 的缩写,即 GNU 编译器套装。它是一套由 GNU 项目开发的编译器。

GCC 的主要功能是将源代码编译成可执行文件或目标代码。

安装命令:yum -y install gcc-c++

更新gcc的版本为9(centos7自带的版本是4.8.5)

执行 yum -y install centos-release-scl

执行 yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9

执行 scl enable devtoolset-9 bash

查看GCC版本:gcc -v

2.2 安装Reis

2.2.1 下载Reidis安装包

进入到opt 目录

cd /opt

wget https://github.com/redis/redis/archive/refs/tags/7.0.2.tar.gz

2.2.2 解压Redis安装包

tar zxvf 7.0.2.tar.gz

2.2.3 修改redis的安装目录

创建redis本地存放目录

mkdir /usr/local/redis/

修改redis的安装目录:修改为 PREFIX?=/usr/local/redis

vi redis-7.0.2/src/Makefile

2.2.4 进入目录编译安装Redis

进入目录进行编译

cd redis-7.0.2/

make

安装Redis

make install

2.2.5 后台启动Redis

在/root目录下创建myredis目录,用于存储启动使用的配置文件

cd /root

mkdir myredis

拷贝一份redis.conf到myredis目录

cp /opt/redis-7.0.2/redis.conf /root/myredis/

修改配置文件中的内容

  • 修改redis.conf(257行附近?或者搜索 ) 文件将里面的daemonize no 改成 yes,让服务在后台启动
  • 修改配置文件中的 bind ,注释该配置,取消绑定仅主机登录
  • 修改protected-mode 为no,取消保护模式

vi /root/myredis/redis.conf

保存退出: 切换到目录模式 输入wq

进入到redis本次存放路径并启动redis

cd /usr/local/redis/bin/

./redis-server /root/myredis/redis.conf

查看服务启动状态

ps -ef | grep redis

关闭防火墙

systemctl stop firewalld.service

设置开机自动关闭防火墙

systemctl disable firewalld.service

通过redis连接工具连接

三、持久化方式:RDB

3.1RDB介绍

RDB(Redis Database) :它是一种定期将数据快照保存到磁盘的方式。在指定的时间间隔内,Redis 会将当前的数据状态生成一个二进制文件。

  • 优点:生成的文件相对较小,恢复速度快。
  • 缺点:可能会丢失在两次快照之间的数据。

3.2具体实现步骤

3.2.1 自动触发

新建dumpfiles文件夹

cd /root/myredis/

mkdir dumpfiles

修改配置文件redis.config

重新启动redis

cd /usr/local/redis/bin/

./redis-server /root/myredis/redis.conf

还原RDB文件,先清除Redis数据

重新启动Redis

执行flushall/flushdb命令也会产生dump.rdb文件,但里面是空的,无意义

不可以把备份文件dump.rdb和生产redis服务器放在同一台机器,必须分开各自存储,以防生产机物理损坏后备份文件也挂了。

3.2.2 手动触发

Redis提供了两个命令来生成RDB文件分别是save和bgsave

实际生产中只允许用bgsave,因为save会终止Redis其他线程,导致内存缓存不可用

手动删除RDB文件

rm -f dump6379.rdb

查看rdb目录

lastsave 可以获取上一个basave的时间戳

在通过 date -d @时间戳 就可以查看上一次保存的时间

如何检查修复dump.rdb文件?

redis-check-rdb dump6379.rdb

四、持久化方式:AOF

4.1 AOF介绍

  1. AOF(Append Only File) :它以日志的形式记录 Redis 执行的每个写操作。当 Redis 重新启动时,可以通过重新执行这些写操作来还原数据。
  • 优点:可以更好地保证数据的完整性。
  • 缺点:随着时间的推移,AOF 文件可能会变得较大。

4.2具体实现步骤

修改配置文件,把appendonly on改为yes :(默认是no关闭,设置为yes就打开aof待持久化支持)

重启redis并修改数据

shutdown

quit

./redis-server /root/myredis/redis.conf

./redis-cli

查看/root/myredis目录下产生的文件

先删除RDB文件来验证AOF还原数据

rm -f dump6379.rdb

重启redis

SHUTDOWN

quit

./redis-server /root/myredis/redis.conf

./redis-cli

异常修复命令:redis-check-aof --fix进行修复

4.3 AOF的重写机制

AOF(Append Only File)重写是 Redis 中的一种优化机制,用于减小 AOF 文件的体积,提高系统性能。随着服务器运行时间的增长,AOF 文件会越来越大,导致使用大文件还原所需的时间也越多。重写并不是一条条分析 AOF 文件中的日志,而是从数据库中读取现在的值,然后用一条命令来记录键值对,代替之前记录这个键值对的多条命令。

官网默认配置

注意 ,同时满足,且的关系才会触发

1 根据上次重写后的aof大小,判断当前aof大小是不是增长了1倍

2 重写时满足的文件大小

4.3.1 自动触发

开启aof

重写峰值修改为1k

关闭混合,设置为no

删除之前的全部aof和rdb,清除干扰项

4.3.2 手动触发

客户端向服务器发送bgrewriteaof命令

bgrewriteaof

五、混合的持久化方式:RDB+AOF

在同时开启RDB 和AOF 持久化时,重启时只会加载 AOF 文件,不会加载 RDB 文件

默认清空下是不开启AOF的,如果开启了AOF,则重启Redis的时候AOF会被优先调用,因为AOF的优先级高于RDB

  • 1 开启混合方式设置

设置aof-use-rdb-preamble的值为 yes yes表示开启,设置为no表示禁用

  • 2 RDB+AOF的混合方式

RDB镜像做全量持久化,AOF做增量持久化

先使用RDB进行快照存储,然后使用AOF持久化记录所有的写操作,当重写策略满足或手动触发重写的时候,将最新的数据存储为新的RDB记录。这样的话,重启服务的时候会从RDB和AOF两部分恢复数据,既保证了数据完整性,又提高了恢复数据的性能。简单来说:混合持久化方式产生的文件一部分是RDB格式,一部分是AOF格式。AOF包括了RDB头部+AOF混写

六、关闭Redi持久化:纯缓存模式

6.1 关闭RDB

把save设置为 save "" 即可

禁用rdb持久化模式下,我们仍然可以使用命令save、bgsave生成rdb文件

6.2 关闭AOF

将appendonly 后面修改为no

七、总结

本文主要介绍了Redis的安装,已经Redis的两种持久化方式的介绍以及使用,还介绍了如何关闭持久化,实际开发中根据业务的具体要求选择具体的方式即可

相关推荐
艾伦~耶格尔2 小时前
Spring Boot 三层架构开发模式入门
java·spring boot·后端·架构·三层架构
man20172 小时前
基于spring boot的篮球论坛系统
java·spring boot·后端
攸攸太上3 小时前
Spring Gateway学习
java·后端·学习·spring·微服务·gateway
罗曼蒂克在消亡3 小时前
graphql--快速了解graphql特点
后端·graphql
潘多编程3 小时前
Spring Boot与GraphQL:现代化API设计
spring boot·后端·graphql
千年死缓4 小时前
go+redis基于tcp实现聊天室
redis·tcp/ip·golang
大神薯条老师4 小时前
Python从入门到高手4.3节-掌握跳转控制语句
后端·爬虫·python·深度学习·机器学习·数据分析
2401_857622665 小时前
Spring Boot新闻推荐系统:性能优化策略
java·spring boot·后端
知否技术5 小时前
为什么nodejs成为后端开发者的新宠?
前端·后端·node.js
AskHarries5 小时前
如何优雅的处理NPE问题?
java·spring boot·后端