缓存:数据可以丢 急速
数据库:数据绝对不能丢
适应linux时父子进程
父进程的数据子进程可不可以看到
常规思想 进程是数据隔离的
进阶思想 父进程可以让子进程看到数据
linux中 export的环境变量,子进程的修改不会破坏父进程,子进程的修改也不会破坏父进程
创建子进程的速度应该是什么程度
如果父进程是redis,内存数据比如10g
1.创建进程的速度
2.内存空间够不够
Fork() 速度快 空间小
copy on write(写时复制)
创建子进程不发生复制
创建进程变快了,根据经验,不可能子进程把左右数据都改一遍
RDB
8点创建子进程
(子进程拿到8点是数据的指针,父进程8点后对数据的修改看不到)
save 阻塞储存(如关机维护时使用)
bgsave fork()创建子进程 异步储存
配置文件中给出bgsave的规则
# save ""
save 900 1
save 300 10
save 60 10000
# 文件名及存储位置
dbfilename dump.rdb
dir /var/lib/redis/6379
弊端
1.不支持拉链 只有一个dump.rdb
减少操作复杂度 节约内存资源
2.丢失的数据相对多一些
时点和时点之间窗口数据容易丢失
全量持久化备份 通病
优点
类似java中的序列化,恢复速度相对快
AOF(Apend Only File)
redis 的写操作记录到文件中
丢失数据相对少
resis中RBD和AOF可以同时开启,如果开启了AOF,恢复时只会用AOF
4.0以后 AOF中包含RDB全量,增加记录新的写操作
弊端:体量无限变大》恢复慢
解决:设计一个方案 让日志,AOF足够小
appendonly yes
appendfilename "appendonly.aof"
# appendfsync always
appendfsync everysec
# appendfsync no