redis持久化
一、redis实现持久化过程,如下图
redis是一个内存数据库,它是将数据存储到内存中去,与传统的数据库不同,它的读写效率很好,但是也有一个缺点,一旦发生服务器宕机,这样容易导致数据全部丢失,所以,这里就用到了持久化,持久化可以将数据全部持久化到硬盘中,同时也可以利用持久化文件来恢复数据。redis支持2种持久化:rdb和aof。
二、持久化触发方式
1手动触发
vim /opt/redis_6379/conf/redis_6379.conf
dbfilename redis.rdb
dir /data/redis_6379/
[root@oldboyedu redis_6379]# redis-cli
127.0.0.1:6379> KEYS *
(empty list or set)
127.0.0.1:6379> MSET k1 v1 k2 v2
OK
127.0.0.1:6379> KEYS *
1) "k2"
2) "k1"
127.0.0.1:6379> BGSAVE
Background saving started
127.0.0.1:6379>
[root@oldboyedu redis_6379]# systemctl stop redis
[root@oldboyedu redis_6379]# systemctl start redis
[root@oldboyedu redis_6379]# redis-cli
127.0.0.1:6379> KEYS *
1) "k2"
2) "k1"
PS:因为做了持久化所以关闭redis再次开启redis数据不会丢失
2自动触发
vim /opt/redis_6379/conf/redis_6379.conf
#900秒内1个key发生改变
save 900 1
#300秒内10个key发生改变
save 300 10
#60秒内10000个key发生改变
save 60 10000
三RDB持久化流程图
四RDB持久化结论:
没配置save参数时: 1.shutdown/pkill/kill都不会持久化保存 2.可以手动执行bgsave
配置save参数时: 1.shutdown/pkill/kill均会自动触发bgsave持久化保存数据 2.pkill -9 不会触发持久化
恢复时: 1.持久化数据文件名要和配置文件里定义的一样才能被识别 2.RDB文件只有一个数据文件,迁移和备份只要这一个RDB文件即可
注意: RDB高版本兼容低版本,低版本不能兼容高版本 3.x >> 5.X >> OK 5.x >> 3.x >> NoOK
五RDB持久化的优势与劣势:
RDB: 类似于快照,当前内存里的数据的状态持久化到硬盘
优点:压缩格式/恢复速度快
缺点:不是实时的,可能会丢数据,操作比较重量
六AOF持久化
持久化配置
#开启aof持久化
appendonly yes
#aof文件名
appendfilename "redis.aof"
#everysec表示每秒执行一次fsync,可能会导致丢失这1s数据。通常选择 everysec ,兼顾安全性和效率。
appendfsync everysec
七 AOF持久化流程图
八aof重写机制
由于aof的实时同步数据,数据越大,那么文件就越大,占用内存也就越多,恢复起数据来也就越慢,所以就有了重写机制,重写机制会对数据进行压缩,保留可以恢复数据的一个最小指令集。
BGREWRITEAOF
九 AOF的优势与劣势
AOF:类似于mysql的binlog,可以设置成每秒/每次操作都以追加的形式保存在日志文件中
优点:安全,最多只损失1秒的数据,具备一定的可读性
缺点:文件比较大,恢复速度慢