Redis 持久化存储

一、简介

1、RDB

redis默认的持久化存储方式,每隔一段时间将内存中的数据写入磁盘中。有手动触发和自动出发两种触发方式。

2、AOF

AOF持久化将被执行的写命令记录到AOF文件的末尾,来记录数据发生的变化。Redis启动时,读取AOF文件中的命令并在内存中重新执行,从而恢复数据。

3、区别

|-------|------------------------------------------------------------------|---------------------|
| 持久化技术 | 优点 | 缺点 |
| RDB | 1、拥有相同数据集时,相比AOF持久化所占用磁盘空间更少 2、使用单独的子进程进行持久化存储,主进程不进行其它IO操作,更为高效 | 1、隔一段时间进行持久化,数据安全性差 |
| AOF | 1、通过记录写命令的方式进行持久化,即使发生异常,也可以通过AOF文件恢复数据,安全性更高 | 1、占用磁盘空间大 2、恢复数据慢 |

二、配置

1、RDB
1.1 工作模式

(1)手动触发

由主进程执行save命令,执行过程中会阻塞所有用户请求,直至执行完成。

bash 复制代码
192.168.56.136:6379> save
OK

(2)自动触发

bgsave。当内存增长到指定值或指定百分比时,自动触发bgsave。主进程调用fork函数,派生出子进程,进行持久化存储,主进程只负责处理客户请求。数据会先存储到临时文件,当持久化处理完后,用临时文件替换上次持久化的文件dump.rdb。

1.2 配置
bash 复制代码
# rdb文件存放目录
dir /usr/local/redis/
# rdb文件名
dbfilename dump.rdb
# 是否压缩
rdbcompression yes
# 是否检查备份文件完整性
rdbchecksum yes
# 当磁盘空间满时,是否停止redis写操作
stop-writes-on-bgsave-error yes
# 备份策略
# 每隔1分钟,写1000次
save 60 1000
1.3 禁用RDB配置
bash 复制代码
# 禁用RDB
save ""
2、AOF
2.1 工作模式

AOF持久化以日志的形式记录写操作,当服务器宕机重启或服务重启后,会按顺序逐行读取日志来重构数据库并恢复数据。

一般都是和RDB共同使用,不单独使用。

2.2 配置
bash 复制代码
# 开启AOF持久化
appendonly yes

# 工作目录位置
dir /usr/local/redis/

# AOF文件名
# appendonly.aof.1.base.rdb作为基文件
# appendonly.aof.1.incr.of,appendonly.aof.2.incr.of作为增量文件
# appendonly.aof.manifest作为清单文件
appendfilename "appendonly.aof"

# AOF文件存放目录
appenddirname "appendonlydir"

# AOF fsync策略
# 默认everysec,每秒写入一次
# no:只操作系统需要的时候写入,由操作系统操控。速度快,安全性差
# always: 有写入操作就追加到AOF文件中。降低速度,安全性高
appendfsync everysec

# 重写期间是否执行fsync操作
# 默认no,执行fsync。安全性更高,但是影响性能
# yes,不执行fsync。性能更高,但是会丢失数据,最多30秒的数据
no-appendfsync-on-rewrite no

# AOF重写规则
# 当AOF文件超过上次重写文件的百分比(默认100%),或者超过64M
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# 是否允许redis在加载aof文件过程中,遇到文件末尾截断或损坏,仍继续加载其它部分
# 默认 yes。允许忽略错误,继续加载。
# no。不允许。每次重启前需要执行 redis check AOF 命令,修复AOF文件
aof-load-truncated yes

# 是否开启RDB AOF混合模式
# 默认yes,开启混合模式。重写时,将持久化数据以RDB格式写入到AOF文件开头,后续的数据以AOF格式追加到末尾
# no,不开启
aof-use-rdb-preamble yes

# 是否在AOF日志文件记录时间戳
# 默认 no,不开启。
# yes,开启。对性能的影响微不足道,会占用更多的磁盘空间,但是可以提供更精确的数据恢复时间
aof-timestamp-enabled no
相关推荐
❀͜͡傀儡师28 分钟前
多台服务器上docker部署 Redis 集群
运维·服务器·redis
银河金融数据库1 小时前
历史分钟高频数据
数据库·金融
男Ren、麦根1 小时前
MySQL 复制与主从架构(Master-Slave)
数据库·mysql·架构
Foyo Designer2 小时前
【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的国际化:支持多语言的 RESTful API
java·spring boot·redis·后端·spring·缓存·restful
十六ᵛᵃᵉ2 小时前
day6_FlinkSQL实战
java·redis·ajax
嘉友2 小时前
Redis zset数据结构以及时间复杂度总结(源码)
数据结构·数据库·redis·后端
morganmin2 小时前
(一)MySQL常见疑惑之:select count(*)和select count(1)的区别
数据库·mysql
深圳厨神3 小时前
mysql对表,数据,索引的操作sql
数据库·sql·mysql
谁家有个大人3 小时前
数据分析问题思考路径
数据库·数据分析
hweiyu003 小时前
从JVM到分布式锁:高并发架构设计的六把密钥
jvm·redis·分布式·mysql·etcd