本文主要是介绍Redis必知必会之持久化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.Redis所有的数据保存在内存中,对数据的更新将异步的保存到磁盘上。
2.持久化的方式:快照(MySQL Dump和Redis RDB)、写日志(MySQL Binlog和Redis AOF)
3.Redis RDB触发方式
- save(同步命令,替换老文件)
- bgsave (异步命令,fork() 一个进程处理 一般情况会很快)
- 自动
命令 |
save |
bgsave |
IO类型 |
同步 |
异步 |
是否阻塞 |
是 |
是(发生在fork()) |
复杂度 |
O(n) |
O(n) |
优点 |
不会消耗额外内存 |
不阻塞客户端命令 |
缺点 |
阻塞客户端命令 |
需要fork 消耗内存 |
4.自动生成RDB的配置,本质是每seconds会有changes个改变 就会执行bgsave。
相关配置:
- stop-writes-on-bgsave-error bgsave时发生错误时是否停止写入
- dir rdb目录
- rdbcompression 是否压缩
- rdbchecksum 校验和检验
最佳实践:
- dbfilename dump-${port}.rdb
- dir /bigdiskpath
- stop-writes-on-bgsave-error yes
- rdbcompression yes
- rdbchecksum yes
5.rdb生成触发机制 全量复制、debug reload 、shutdown。
6.RDB耗时、耗性能。
- O(n)数据:耗时
- fork():消耗内存,copy-on-write策略
- Disk I/O : IO性能
7.RDB不可控、有可能丢失数据。
8.AOF 的三种策略
- always 写命令刷新的缓冲区
- everysec 默认
- no 操作系统决定
命令 |
always |
everysec |
no |
优点 |
不丢失数据 |
每秒一次fsync |
不用管 |
缺点 |
IO开销较大 一般sata盘只有几百TPS |
丢一秒数据 |
不可控 |
9.AOF重写作用 减少硬盘占用量、加速恢复速度。AOF重写实现的两种方式:bgrewriteaof、AOF重写配置。
10.AOF重写配置
- auto-aof-rewrite-min-size:AOF文件重写需要的尺寸
- auto-aof-rewrite-percentage:AOF文件增长率
- aof_current_size:AOF当前尺寸
- aof_base_size:AOF上次启动和重写的尺寸
11.AOF配置最佳实践
- appendonly yes
- appendfilename “appendonly-${port}.aof”
- appendfsync everysec
- dir /bigdiskpath
- no-appendfsync-on-rewrite yes
- auto-aof-rewrite-percentage 100
- auto-aof-rewrite-min-size 64mb
12.RDB和AOF对比
命令 |
RDB |
AOF |
启动优先级 |
低 |
高 |
体积 |
小 |
大 |
恢复速度 |
快 |
慢 |
数据安全性 |
丢数据 |
根据策略决定 |
轻重 |
重 |
轻 |
这篇关于Redis必知必会之持久化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!