您的位置:首页 > 新闻 > 热点要闻 > Redis持久化

Redis持久化

2025/1/5 7:15:41 来源:https://blog.csdn.net/weixin_44296614/article/details/139729100  浏览:    关键词:Redis持久化

持久化

自建Redis镜像

由于docker hub暂时不能正常使用,故使用自建阿里云docker镜像,这里仅仅记录一下,可以直接跳到后面的安装

docker pull registry.cn-hangzhou.aliyuncs.com/yeswater/redis:7.2.4

遇到的问题

docker desktop 和 virtual box切换

这两个虚拟的产品之间应该有兼容性问题,需要在执行windows cmd 切换一下

bcdedit /set hypervisorlaunchtype auto

windows 执行上述命令然后重启,可正常使用docker desktop

科学上网,拉取镜像,上传到个人阿里云镜像仓库

bcdedit /set hypervisorlaunchtype off

windows 执行上述命令然后重启,可正常使用virtual box

使用虚拟机操作docker镜像

docker安装 Redis

步骤:

  • 创建 confdata文件夹,方便后边挂载
  • 复制官网 链接 redis.conf 文件,方便后面正常启动镜像
  • 拉取镜像
  • 启动

官网redis.conf https://github.com/redis/redis/blob/unstable/redis.conf

mkdir -p /usr/local/redis7.2.4/conf
mkdir -p /usr/local/redis7.2.4/data
touch /usr/local/redis7.2.4/conf/redis.conf#开启远程权限
bind 0.0.0.0 docker run --name redis7.2.4  \
-v /usr/local/redis7.2.4/data:/data  \
-v /usr/local/redis7.2.4/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-p 6379:6379 -d 9b38108e295d \
redis-server /usr/local/etc/redis/redis.conf

redis-server /usr/local/etc/redis/redis.conf 指定配置文件位置

遇到的问题

通过第三方软件连接会报错

设置Redis密码 可解决该问题

cmd 设置Redis密码

docker exec -it reids7 /bin/bash
reids-cli
config set requirepass 123456

RDB

记录数据快照

RDB 自动触发

创建 dumpfiles 文件夹

请添加图片描述

配置

五秒内 set 达到2次就记录dump文件

在这里插入图片描述

dump文件路径
在这里插入图片描述

dump文件名
在这里插入图片描述

实操演示

5秒内插入4条数据

127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> set k3 v3
OK
127.0.0.1:6379> set k4 v4
OK
127.0.0.1:6379>

/data/dumpfiles 目录下自动生成 dump6379.rdb文件

在这里插入图片描述

验证持久化

重启后keys * 能够看到数据

在这里插入图片描述

1、备份文件 dump.rdb 移动到 redis设置的dump文件目录下,即可恢复数据

2、建议备份文件和服务放在不同主机

RDB 手动触发

save和 bgsave

1、save会阻塞redis 服务器

2、bgsavefork() 一个子进程,由子进程复制持久化过程。可以用 lastsave 检查是否执行成功

在这里插入图片描述

save 案例

前面设置了save 5 1 这里只插入一条数据,执行save,观察 dump 文件修改时间,可见持久化成功

在这里插入图片描述

在这里插入图片描述

bgsave 案例

前面设置了save 5 1 这里只插入一条数据,执行bgsave,观察 dump 文件修改时间,可见持久化成功

执行lastsav可以得到持久化成功时间,由此判断是否持久化成功

在这里插入图片描述

在这里插入图片描述

RDB的缺点

1、宕机时RDB会丢失未持久化的数据

2、数据量大时,会增加IO消耗

3、fork (克隆主线程)会复制一份内存,消耗内存

RDB丢失数据演示

使用docker restartshutdown 且未设置AOF,重启前会备份当前数据

使用 flushallflushdb 会生成空 dump 文件

所以这里演示,直接 kill 进程

1、set k6 v6,此时不满足save 5 2

2、直接 kill -9 redis-server

3、再启动 redis ,查看数据,观察可见 k6 v6未被持久化,数据丢失

在这里插入图片描述

在这里插入图片描述

禁用RDB

在这里插入图片描述

RDB优化参数

save <seconds> <changes>

dbfilename

dir

stop-writes-on-bgsave-error 数据一致性

rdbcompression 压缩快照

rdbchecksum 数据校验

rdb-del-sync-flies 在没有快起持久化的情况下删除复制生成的 rdb 文件

AOF

记录写操作日志

工作流程

在这里插入图片描述

写回策略

always: 每次写入

everysec:每秒写入

no:操作系统决定写入

在这里插入图片描述

开启AOF

在这里插入图片描述

文件&路径

redis 6:一个文件,和rdb共用路径

redis 7:三个文件,新路径为 dir + appenddirname

在这里插入图片描述

在这里插入图片描述

演示

在dir + appenddirname 路径下,生成三个文件

只有在 set 时,aof 文件会更新,get 时 aof 不会更新,其他两个文件 get set 都不会更新

在这里插入图片描述

在这里插入图片描述

AOF重写机制

AOF持久化是Redis持久将命令记录到AOF文件,随着Redis的运行,AOF文件会变大,当AOF文件大小操作设定的值,Redis就会自动启动AOF文件压缩,只保留可以恢复数据的最小指令集

也可以手动重写 bgrewriteaof

默认自动触发规则:操作上次rewrite大小的100% (达到上次的两倍) 且 文件大于 64 M时

第一次达到 auto-aof-rewrite-min-size 时会重写 (演示如下)

在这里插入图片描述

演示

这里auto-aof-rewrite-min-size设为 1k aof-use-rdb-preamble设为 no演示

set操作

在这里插入图片描述

aof文件变化

在这里插入图片描述

RDB 和 AOF对比

在这里插入图片描述

AOF+RDB 混合模式

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

先使用RDB进行快照存储,然后使用AOF持久化记录所有的写操作,当重写策略满足或手动触发重写的时候,将最新的数据存储为新的RDB记录。这样的话,重启服务的时候会从RDB和AOF两部分恢复数据,既保证了数据完整性,又提高了恢复数据的性能。

aof-use-rdb-preamble设为 yes演示

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com