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
相关推荐
打码人的日常分享3 分钟前
企业人力资源管理,人事档案管理,绩效考核,五险一金,招聘培训,薪酬管理一体化管理系统(源码)
java·数据库·python·需求分析·规格说明书
好好学习的人14 分钟前
SQL第12课——联结表
数据库·sql
程序员古德21 分钟前
系统架构设计师论文《论NoSQL数据库技术及其应用》精选试读
数据库·nosql
青云交30 分钟前
大数据新视界 --大数据大厂之 DataFusion:超越传统的大数据集成与处理创新工具
数据库·内存管理·apache hive·数据集成·大数据处理·datafusion·查询处理·powercenter
s_little_monster33 分钟前
【QT】QT入门
数据库·c++·经验分享·笔记·qt·学习·mfc
九圣残炎36 分钟前
【springboot】简易模块化开发项目整合Redis
spring boot·redis·后端
hefaxiang1 小时前
【MYSQL】mysql约束---自增长约束(auto_increment)
数据库·mysql
琴智冰1 小时前
SpringBoot
java·数据库·spring boot
AAEllisonPang2 小时前
Oracle 时间计算
数据库·oracle
m0_716499062 小时前
达梦8-数据守护集群主备故障实验和脑裂处理
数据库