Redis中RDB和AOF

Redis中RDBAOF

定时间间隔执行数据集的时间快照,把某一时刻数据和妆容以文件的形式写到磁盘上,也就是快照。

配置文件

如果是普通安装方式可以跳过,如果是docker安装,需要到官网下载redis.conf配置文件到本地,地址如下

http://download.redis.io/redis-stable/redis.conf

设置配置Redis文件配置路径

创建存放redisconf文件夹如果不想存放到这里也可以换一个地方;创建完成后将下载好的配置文件拖入到里面

sh 复制代码
mkdir - p /home/docker/redis/config

设置redisdata存放目录,如果不想存放到这里;也可以换一个地方

sh 复制代码
mkdir -p /home/docker/redis/data

拉取镜像

sh 复制代码
docker pull redis

运行redis,这里路径就是上面我配置的路径

sh 复制代码
docker run -p 6379:6379 --name redis \
-v /home/docker/redis/config/redis.conf:/etc/redis/redis.conf \
-v /home/docker/redis/data:/data \
-d redis redis-server /etc/redis/redis.conf \
--appendonly yes

如果需要设置开机启动

sh 复制代码
docker update --restart=always redis

进入镜像的Redis,可以看到配置文件已存在

sh 复制代码
docker exec -it redis bash
cd /etc/redis/

之后只需要在外面修改配置文件,里面的配置文件也会跟着改,这样就不用切换到镜像内部去改配置文件了

设置配置文件设置

5秒内2次修改就保存
sh 复制代码
save 5 2
修改dump文件保存路径

修改保存文件到/data/redis/dumpfiles,文件夹一定要先存在

sh 复制代码
# 可以先使用命令
mkdir -p /data/redis/dumpfiles

**修改配置文件 **

sh 复制代码
dir /data/redis/dumpfiles
sh 复制代码
# 获取文件目录
config get dir 

获取密码

sh 复制代码
CONFIG GET requirepass

获取端口号

sh 复制代码
CONFIG GET port

Redis默认是有数据保存的功能,但是只是在停机的时候,如果这时候突然宕机数据还是会丢失。

RDB

RDB文件(dump.rdb),其中RDB就是Redis就是Redis DataBase缩写也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。

快照文件称为RDB文件,默认是保存在当前运行目录。

  • RDB方式bgsave的基本流程?
    • fork主进程得到一个子进程,共享内存空间
    • 子进程读取内存数据并写入新的RDB文件
    • 用新RDB文件替换旧的RDB文件
  • RDB会在什么时候执行?save 60 1000代表什么含义?
    • 默认是服务停止时
    • 代表60秒内至少执行1000次修改则触发RDB
  • RDB的缺点?
    • 执行时间间隔厂,两次RDB之间写入数据有丢失风险
    • fork子进程、压缩、写出RDB文件都比较耗时

save

Redis主进程来来执行RDB,会阻塞所有命令,这种方式并不推荐。

sh 复制代码
# 900秒内有一次修改就执行
save 900 1
# 300 秒内有10次修改就执行
save 300 10
# 60秒内有10000次修改就保存
save 60 10000

RDB的其它设置可以在redis.conf配置中设置

sh 复制代码
# 是否压缩,建议不开启因为会消耗CPU
rdbcompression yes # 默认是开启的
# RDB文件名称
dbfilename dump.rdb

bgsave

开启子进程来执行RDB,避免主进程受到影响。子进程共享主进程的内存数据。完成fork后读取内存数据并写入 RDB 文件。

fork采用的是copy-on-write技术,会创建一个新的RDB文件会替换旧的RDB文件。

AOF

AOF全称为Append 0nly File(追加文件)。Redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件。

也是解决RDB的缺点,开启方式,修改redis.conf

正常都是使用appendfsyns everysec

sh 复制代码
# 是否开启AOF,默认是no
appendonly yes
# AOF文件的名称
appendfilename "appendonly.aof"
# 表示每执行一次写命令,立即记录到AOF文件
appendfsync always
# 写命令执行先放入AOF缓冲 区,然后表示每隔1秒将缓冲区数据写到AOF文件,是默认安装
appendfsync everysec 
# 写命令执行完先放入AOF缓冲区,由操作系统决定何时将缓冲区内容写入磁盘
appendfsync no

因为是记录命令,AOF文件会比RDB文件大的多。而且AOF会记录对同一个key的多次写操作,但只有最后一次写操作才有意义。通过执行bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同效果。

sh 复制代码
# AOF文件比上次文件 增长超过多少百分比则触发重写
auto-aof-rewrite-percentage 100
# AOF文件体积最小多大以上才触发重写
auto-aof-rewrite-min-size 64mb

次写操作才有意义。通过执行bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同效果。

sh 复制代码
# AOF文件比上次文件 增长超过多少百分比则触发重写
auto-aof-rewrite-percentage 100
# AOF文件体积最小多大以上才触发重写
auto-aof-rewrite-min-size 64mb
相关推荐
咕噜Yuki06096 分钟前
OCP证书如何下载?
数据库·ocp·证书查询
冬瓜31231 分钟前
linux-c 使用c语言操作sqlite3数据库-1
数据库·sqlite
夜色呦34 分钟前
现代电商解决方案:Spring Boot框架实践
数据库·spring boot·后端
WangYaolove13141 小时前
请解释Python中的装饰器是什么?如何使用它们?
linux·数据库·python
明志致远淡泊宁静1 小时前
记录一次服务器redis被入侵
运维·服务器·redis
我是黄大仙1 小时前
利用飞书多维表格自动发布版本
运维·服务器·数据库·飞书
曾经的三心草1 小时前
Mysql之约束与事件
android·数据库·mysql·事件·约束
WuMingf_1 小时前
redis
数据库·redis
张某布响丸辣2 小时前
SQL中的时间类型:深入解析与应用
java·数据库·sql·mysql·oracle