Redis持久化
什么是持久化
利用永久性存储介质将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化
为什么要进行持久化
防止数据的意外丢失,确保数据安全性
持久化过程保存什么
- 将当前数据状态进行保存,快照形式,存储数据结果,存储格式简单,关注点在数据
- RDB(快照)
- 将数据的操作过程进行保存,日志形式,存储操作过程,存储格式复杂,关注点在数据的操作过程
- OAF(日志)
RDB启动方式——save指令
因为redis是单线程,一个一个处理的,save指令的执行会阻塞当前Redis服务器,直到当前RDB过程完成为止,有可能会造成长时间阻塞,线上环境不建议使用
RDB保存的 位置,在你redis.conf文件指定的保存位置
127.0.0.1:6379> save OK [root@kafka01 redis]# cat dump.rdb
——save指令相关 配置
port 6380 daemonize yes logfile "6380.log" dir /usr/local/redis/data dbfilename dump-6380.rdb rdbcompression yes rdbchecksum yes
- dbfilename dump.rdb
- 说明:设置本地数据库文件名,默认值为dump.rdb
- 经验:通常设置为dump-端口号.rdb
- dir
- 说明:设置存储.rdb文件的路径
- 经验:通常设置成存储空间较大的目录中,目录名称data
- rdbcompression yes
- 说明:设置存储至本地数据库时是否压缩数据,默认为yes,采用LZF压缩
- 经验:通常默认为开启
- rdbchecksum yes
- 说明:设置是否进行RDB文件格式校验,该校验过程在写文件和读文件的过程均进行
- 经验
- stop-writes-on-bgsave-error yes
- 说明:后台存储过程中如果出现错误现象,是否停止保存操作
- 通常默认为开启状态
[root@kafka01 redis]# ./bin/redis-server data/redis-6380.conf
[root@kafka01 redis]# netstat -lntup|grep 6380
tcp 0 0 0.0.0.0:6380 0.0.0.0:* LISTEN 26945/./bin/redis-s
tcp6 0 0 :::6380 :::* LISTEN 26945/./bin/redis-s
数据量过大,单线程执行方式造成效率过低如何处理?
后台执行——bgsave指令
bgsave使用过子进程创建rdb文件,不用排队
- 谁:redis操作者(用户)发起指令;redis服务器控制指令执行
- 什么时间:即时(发起);合理的时间(执行)
- 干什么事情:保存数据
[root@kafka01 redis]# redis-cli -p 6380 127.0.0.1:6380> set kk oo OK 127.0.0.1:6380> get kk "oo" 127.0.0.1:6380> bgsave Background saving started
RDB优点
- RDB是一个紧凑压缩的二进制文件,存储效率较高
- RDB内部存储的是Redis在某个时间点的数据快照,非常适合用于数据备份,全量复制等场景
- RDB数据恢复的速度要比AOF快很多
- 应用:服务器中每X小时执行bgsave备份,并将RDB文件拷贝到远程机器中,用于容灾备份
RDB缺点
- RDB方式无论是执行指令还是利用配置,无法做到实时持久化,具有较大的可能性
- bgsave指令每次运行要执行fork操作创建子进程,要牺牲掉一些游戏
- Redis的众多版本中未进行RDB文件格式的版本统一,有可能出现各种版本服务之间数据格式无法兼容现象
AOF概念
- AOF持久化:以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中命令达到恢复数据的目的。与RDB相比可以简单描述为改记录数据为记录数据产生的过程
- AOF的主要作用是解决了数据持久化的实时性,目前已经是Redis持久化的主流方式
AOF写数据三种策略
- always(每次)数据要求高选这种
- 每次写入操作均同步到AOF文件中,数据0误差,性能较低
- everysec(每秒)建议这种
- 每秒将缓冲区中的指令同步到AOF文件中,数据准确性较高,性能较高
- 在系统突然宕机的情况下丢失1秒内的数据
- no(系统控制)
- 有操作系统控制没同步到AOF文件的周期,整体控制不可控
AOF功能开启
配置
appendonly yes
作用
- 是否开启AOF持久化功能,默认为不开启状态
AOF写数据策略
appendfsync everysec
在配置文件中添加
[root@kafka01 data]# vim redis-6380.conf
port 6380
daemonize yes
logfile "6380.log"
dir /usr/local/redis/data
dbfilename dump-6380.rdb
rdbcompression yes
rdbchecksum yes
appendonly yes
appendfsync everysec
在数据目录里会看到aof存储文件
[root@kafka01 redis]# ./bin/redis-server ./data/redis-6380.conf
[root@kafka01 data]# ll
total 12
-rw-r--r-- 1 root root 2944 Feb 25 19:13 6380.log
-rw-r--r-- 1 root root 0 Feb 25 19:13 appendonly.aof
-rw-r--r-- 1 root root 105 Feb 25 16:39 dump-6380.rdb
-rw-r--r-- 1 root root 165 Feb 25 19:05 redis-6380.conf
AOF写数据遇到的问题
如果连续执行如下指令该如何处理,如果按常规的AOF配置,会对下面每一条操作指令进行存储
AOF自动重写方式
- 自动重写触发条件设置
//定义自动重写AOF的最小尺寸 auto-aof-rewrite-min-size size auto-aof-rewrite-percentage percent
- 自动重写触发比对参数(运行指令info Persistence获取具体信息)
//自动重写触发比对参数(运行指令info Persistence获取具体信息) aof_current_size //基础尺寸 aof_base_size
继续阅读

我的微信
这是我的微信扫一扫
评论