持久化
我们知道,redis数据库的数据都是存放在内存中的,虽然很高效,但是存在一个很严重的问题,如果突然停电,那我们的数据就全部丢失了。
这个时候我们就要持久化,我们需要将我们的数据备份到硬盘上。
持久化的实现有两种方案:
1.RDB:直接保存当前已经存储的数据,相当于复制内存中的数据到硬盘上,需要修复数据时读取即可。
2.AOF:保存我们存放数据的所有过程,只要将整个过程完整地推演一遍即可。
RDB:
save
-- 注意上面这个命令是直接保存,会占用一定时间,也可以单独开一个子进程后台执行保存
bgsave
--创建子线程执行保存
执行save命令,会在redis文件目录中生成.rdb文件,redis通过读取rdb文件将数据重新加载。
我们可以在配置文件中设置自动保存,并设定在一段时间内写入多少数据时,执行一次写操作:
save 300 10 #在300s内有10个写入,则自动保存
save 60 10000 #在60s内有10000次写入,则自动保存
AOF:AOF会以日志的形式将我们每次执行的命令进行保存,服务器重启时会将所有命令依次执行,通过这种方式将数据恢复。
但是,我们多久写一次日志呢?我们可以自己配置保存策略,有三种策略:
always:每次执行写操作都会保存一次。
everysec:每秒保存一次(默认配置),这样就算丢失数据也只会丢失一秒内的数据。
no:看系统心情保存
可以在配置文件中配置
appendonly yes
#appendfsync always
appendfsync everysec
#appendfsync no
redis有一个AOF重写机制进行优化,比如我们执行了这样的语句
lpush a 333
lpush a 444
lpush a 555
实际上用一条语句也可以实现
lpush a 333 444 555
我们可以输入命令来手动执行重写操作
bgrewriteof