redis通过将数据放在内存里实现高速访问,为了防止意外情况,其数据也可以存放起来
持久化的实现方式有两种方案:一种是直接保存当前已经存储的数据,相当于复制内存中的数据到硬盘上,需要恢复数据时直接读取即可;还有一种就是保存我们存放数据的所有过程,需要恢复数据时,只需要将整个过程完整地重演一遍就能保证与之前数据库中的内容一致。
RDB
直接保存当前已经存储的数据
save
-- 注意上面这个命令是直接保存,会占用一定的时间,也可以单独开一个子进程后台执行保存
bgsave
执行后,会在服务端目录下生成一个dump.rdb文件,而这个文件中就保存了内存中存放的数据,当服务器重启后,会自动加载里面的内容到对应数据库中
在配置文件中设置自动保存,设定在一段时间内写入多少数据时,执行一次保存操作
save 300 10 # 300秒(5分钟)内有10个写入
save 60 10000 # 60秒(1分钟)内有10000个写入
配置的save使用的都是bysave后台执行
AOF
AOF就是另一种方式,它会以日志的形式将每次执行的命令都进行保存,服务器重启时会将所有命令依次执行,通过这种重演的方式将数据恢复,这样就能很好解决实时性存储问题
配置保存策略
always:每次执行写操作都会保存一次
everysec:每秒保存一次(默认配置),这样就算丢失数据也只会丢一秒以内的数据
no:看操作系统
在配置文件中配置
重启服务器后,可以看到服务器目录下多了一个appendonly.aof
文件,存储的就是执行的命令
Redis有一个AOF重写机制进行优化,因为只需要重演的结果和原来的一样就行,所以可以对语句任意地修改达到压缩的目的
输入命令来手动执行重写操作
bgrewriteaof
在配置文件中配置自动重写
# 百分比计算
auto-aof-rewrite-percentage 100
# 当达到这个大小时,触发自动重写
auto-aof-rewrite-min-size 64mb
比较
-
AOF:
-
优点:存储速度快、消耗资源少、支持实时存储
-
缺点:加载速度慢、数据体积大
-
-
RDB:
-
优点:加载速度快、数据体积小
-
缺点:存储速度慢大量消耗资源、会发生数据丢失
-