文章目录
redis 持久化
RDB 二进制快照 dump.rdb(snapshot)
默认的情况下,redis将内存数据库快照保存在名为dump.rdb 的二进制文件中
持久化方式:
条件触发,配置 redis.conf
持久化方方法 、几秒内,几个改动
save 900 1 # 900秒内,有1个改动,就用save 方式持久化一次
save 300 10
save 60 10000
save
&bgsave
save:同步操作
bgsave:异步操作(写时复制(COW Copy-On-Write),fork 一个新的进程)
在生成快照的同时,依然可以正常处理写命令,简单来说,bgsave 子进程是由主线程fork生成的
save&bgsave 对比
命令 | save | bgsave |
---|---|---|
IO类型 | 同步 | 异步 |
是否阻塞redis 其他命令 | 是 | 否(在生成子进程执行调用fork函数时会有短暂阻塞) |
复杂度 | O(n) | O(n) |
优点 | 不会消耗额外内存 | 不阻塞客户端的命令 |
缺点 | 阻塞客户端命令 | 需要fork子进程,消耗内存 |
配置自动生成rdb 文件后台使用的是bgsave方式
思考:redis是单线程?
AOF (append-only file)
1. 开启aof
appendonly yes
appendfilename "appendonly.aof" # 所有修改的命令 写入该文件
文件名:xxx.aof
set
incr
通过命令 实现持久化
# appendfsync always # 每写一条命令,持久化一次
appendfsync everysec # 每一秒,持久化一次,丢1s文件
# appendfsync no # 不开启 aof 持久化方式