赞
踩
Redis是基于内存的NoSQL数据库,读写速度很快,但是存储在内存中的Redis数据会在服务器重启后丢失。
然而在一些场景中,需要长久的保存数据,所以需要把内存中的数据持久化的保存在硬盘中。
Redis持久化提供两种方式:
1️⃣:AOF(Append Only File)只追加文件
2️⃣:RDB(Redis DataBase)基于Redis数据库
Redis的AOF持久化是指将数据存储到二进制日志文件中,以便在重启或出现故障时可以恢复数据。
AOF持久化会周期性地将数据写入到日志文件中,因此可以实现更高的数据备份频率。
在使用基于AOF的持久化方式时,需要注意以下几点:
基于RDB的持久化方式会把当前内存中所有Redis键值对数据以快照(snapshot)的方式写入硬盘文件中,如果需要恢复数据,就把快照文件读到内存中。
RDB持久化的主要优点是数据可以快速恢复,而且不需要消耗太多的系统资源。
但是,RDB持久化也有一些缺点,如数据在内存中的写入和查询效率可能会受到一定的影响,并且RDB持久化方式不支持快速的数据备份和恢复。
因此,在实际应用中,需要根据具体场景选择适合的持久化方式。
可以通过设置配置文件里的参数来启动或停止AOF持久化机制,由于基于AOF的持久化方式具有实时存储的特性,因此可以在读写关键数据时开启,以防因Redis重启或故障而导致的风险。
AOF配置文件参数说明:通过redis.conf
来配置AOF
appendonly yes
appendfsync everysec
1️⃣:always:每次触发写操作都会触发持久化操作,可能会影响redis自身及redis服务器性能
2️⃣:everysec:会以1秒频率触发持久化动作,这种方式能很好平衡持久化需求和性能间关系
3️⃣:no:由操作系统决定持久化频率,这种方式对其他另外两种而言性能最好,但可能每次持久化操作间的间隔有些长,这样当故障发生时可能会丢失较多的数据。
dir ./
appendfilename "appendonly.aof"
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
注意:,由auto-aof-rewrite-percentage
和auto-aof-rewrite-min-size
两个参数指定的重写条件是“And”的关系,即只有当同时满足这两个条件时才会触发重写操作,比如当前AOF文件的大小小于auto-aof-rewrite-min-size
参数指定的值,哪怕文件增幅达到no-appendfsync-on- rewrite
参数指定的范围,也不会触发重写操作。
实践:
redis.conf
,配置后重启redisdir /data
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
注意:启动redis时指定配置文件
redis-server /path/to/redis.conf
[root@localhost ~]# redis-cli
127.0.0.1:6379> get name001
(nil)
127.0.0.1:6379> set name001 'xiaoming'
OK
127.0.0.1:6379> set age001 30
OK
如果配置成功,当前是开启AOF持久化的,应该会有数据
[root@localhost redis-6.2.12]# cd /data/ [root@localhost data]# ls appendonly.aof [root@localhost data]# cat appendonly.aof *2 $6 SELECT $1 0 *3 $3 set $7 name001 $8 xiaoming *3 $3 set $6 age001 $2 30
以上数据即为持久化文件的内容:
选择0号数据库,插入两条键值对
[root@localhost ~]# redis-cli
127.0.0.1:6379> lpush namelist "yy1"
(integer) 1
127.0.0.1:6379> lpush namelist "yy2"
(integer) 2
127.0.0.1:6379> lpush namelist "yy3"
(integer) 3
127.0.0.1:6379> lpush namelist "yy4"
(integer) 4
*3 $5 lpush $8 namelist $3 yy1 *3 $5 lpush $8 namelist $3 yy2 *3 $5 lpush $8 namelist $3 yy3 *3 $5 lpush $8 namelist $3 yy4
127.0.0.1:6379> BGREWRITEAOF
Background append only file rewriting started
REDIS0009ú redis-ver^F6.2.12ú
redis-bitsÀ@ú^EctimeÂ^<8b><91>dú^Hused-memÂHW^M^@ú^Laof-preambleÀ^Aþ^@û^C^@^@^Fage001À^^^@^Gname001^Hxiaoming^N^Hnamelist^A^_^_^@^@^@^Y^@^@^@^D^@^@^Cyy4^E^Cyy3^E^Cyy2^E^Cyy1ÿÿ^?d^_5µ<82>{^?
[root@localhost data]# ps -ef | grep 6379
root 1943 1 0 19:03 ? 00:00:03 redis-server 127.0.0.1:6379
root 1993 1314 0 19:24 pts/0 00:00:00 grep --color=auto 6379
[root@localhost data]# kill -9 1943
redis-server /root/redis-6.2.12/redis.conf
127.0.0.1:6379> get name001
"xiaoming"
127.0.0.1:6379> get age001
"30"
127.0.0.1:6379> set name002 xiaoli
OK
127.0.0.1:6379> set age002 21
OK
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> get name002
(nil)
127.0.0.1:6379> get age002
(nil)
*3 $3 set $7 name002 $6 xiaoli *3 $3 set $6 age002 $2 21 *1 $8 FLUSHALL
[root@localhost ~]# redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> get name002
"xiaoli"
127.0.0.1:6379> get age002
"21"
看到此内容证明恢复成功
报错:
"Bad file format reading the append only file: make a backup of your AOF file, then use ./redis-check-aof --fix <filename>"
代表AOF文件格式不正确
解决:
redis-check-aof --fix /data/appendonly.aof
后面加你自己的aof文件路径,即可修复成功。
文件损坏也会导致redis启动失败。
在基于RDB的持久化机制里会定时把Redis内存数据以快照的方式保存到硬盘上,而在必要的时候可以通过快照文件来恢复数据。
appendonly no
save 600 1
save 300 100
save 60 1000
1️⃣:第1行代码表示当在600秒内有1个或1个以上的键被修改时就会生成快照
2️⃣:第2行代码表示在300秒内有大于或等于100个键被修改时就会生成快照
3️⃣:第3行表示在60秒内有大于或等于1000个键被修改时会生成快照。
注意:三者是或的关系,满足一条即可触发
dbfilename dump.rdb
dir /data
[root@localhost redis-6.2.12]# redis-server redis.conf
[root@localhost ~]# redis-cli
127.0.0.1:6379> set id001 001
OK
127.0.0.1:6379> set id002 002
OK
[root@localhost redis-6.2.12]# cd /data/
[root@localhost data]# ls
appendonly.aof dump.rdb
[root@localhost data]# cat dump.rdb
REDIS0009 redis-ver6.2.12
redis-bits声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/771027
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。