Redis中RDB
和AOF
定时间间隔执行数据集的时间快照,把某一时刻数据和妆容以文件的形式写到磁盘上,也就是快照。
配置文件
如果是普通安装方式可以跳过,如果是docker安装,需要到官网下载redis.conf
配置文件到本地,地址如下
http://download.redis.io/redis-stable/redis.conf
设置配置Redis文件配置路径
创建存放rediscon
f文件夹如果不想存放到这里也可以换一个地方;创建完成后将下载好的配置文件拖入到里面
sh
mkdir - p /home/docker/redis/config
设置redis
的data
存放目录,如果不想存放到这里;也可以换一个地方
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