redis持久化的取舍和选择
作者:互联网
1.持久化的作用
什么是持久化 redis的数据都是放在内存当中,持久化是对数据的更新异步的保存在磁盘当中 主流数据库的持久化实现方式 快照:将某一时间点的数据进行copy或者是记录,然后异步的写入到磁盘上 mysql dump redis rdb 写日志:将数据的操作都记录到日志里面 mysql binlog,redis aof,hbase hlog
2.rdb
什么是rdb? rdb就用于是redis内存中的数据集快照保存在硬盘上的,用于备份和数据恢复,也是复制的媒介。 可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。 优点:速度快,适合于用做备份,主从复制也是基于RDB持久化功能实现的。 缺点:会有数据丢失(宕机的情况如果没有持久化,就会丢失当前时间到配置响应时间的数据) 触发机制 1.save 同步命令 串行执行,有可能造成redis阻塞,造成redis服务端不会正常的响应客户端。 如果存在老的文件,会新老替换 时间复杂度为o(n),将所有的数据做一个快照同步到硬盘上 2.bgsave(backgroundsave ) 异步命令 异步执行,使用linux的fock函数,生成了redis的子进程redis-rdb-bgsave,让子进程完成rdb的生成。 在大多数情况下fock函数创建redis子进程非常快,一般不会阻塞redis,redis服务端会正常的响应客户端。 bgsvae是所有内存中的数据生成到一个临时文件里面temp-子进程id.rdb,在执行完毕后修改成配置文件里面定义的文件名 时间复杂度为o(n)。 3.自动触发 满足任意一条就会生成rdb文件,但是一般不使用自动触发(自动配置) save 900 1 # 900秒(15分钟)内有1个更改 save 300 10 # 300秒(5分钟)内有10个更改 save 60 10000 # 60秒内有10000个更改 4.触发机制不容忽略的方式 1.全量复制 2.debug reload # 不需要将内存中数据进行清空的重启,会触发rdb文件的生成 3.shutdown # 关闭的时候,有个参数shutdown save 配置文件 vim /data/redis/config/redis.conf daemonize yes # 守护进程的模式 pidfile /data/redis/redis-6379.pid # 防止pid占用 port 6379 dir /data/redis/data # RDB持久化文件,日志文件,aod持久化文件的存放路径,一般选择比较大的磁盘 logfile 6379.log # 日志文件 slowlog-max-len 1000 # 慢日志队列的大小,默认128 slowlog-log-slower-than 1000 # 慢日志阀值,默认是10ms dbfilename dump-端口.rdb # rdb持久化备份的文件,备份话就将rdb文件拷贝走,默认是dump.rdb stop-writes-on-bgsave-error yes #如果bgsave出现错误是否停止写入,如果出现错误,就停止写入。 rdbcompression yes # rdb是否采用压缩的格式,文件会比较小,主从复制速度较快 rdbchecksum yes # 是否对rdb文件校验 总结 1.rdb是redis数据从内存到硬盘的快照,用于持久化 2.save通常会阻塞redis 3.bgsave不会阻塞redis,但是会fock新的进程 4.save的自动配置满足任一条件就会被执行 5.有些触发机制不容忽视
rdb现存问题
1.耗时,消耗性能
从内存读取所有数据,会消耗时间,阻塞redis也会消耗时间
fock()会消耗内存,copy-on-write策略
磁盘io性能消耗
2.不可控,丢失数据
3.aof
4.rbd和aod的选择
5.
标签:文件,持久,redis,取舍,内存,rdb,save 来源: https://www.cnblogs.com/p0st/p/12397889.html