【MySQL】类型合法的脏数据谁来拦?表约束上篇:非空、默认值、zerofill 与主键
2026/9/24 3:22:16
Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。
Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。可以单独使用其中一种或将二者结合使用。
RDB方式的持久化是通过**快照**(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的数据进行快照并持久化到硬盘。
RDB是Redis默认采用的持久化方式(主从复制的时候默认使用的为RDB)。
生成的文件通常是:
dump.rdb内存数据 → fork子进程 → 子进程写入RDB文件 → 替换旧文件
#1.自动触发(配置文件中设置) save9001#900秒内至少有1个key改变 save30010#300秒内至少有10个key改变 save6010000#60秒内至少有10000个key改变含义:
在redis.conf中:
#2.手动触发 redis-cli>SAVE # 同步保存,阻塞其他操作 redis-cli>BGSAVE # 后台异步保存(推荐)默认情况下Redis没有开启AOF(append only file)方式的持久化,可以通过appendonly参数开启:
appendonly yes开启AOF持久化后每执行一条会更改Redis中的数据的命令,Redis就会将该命令写入硬盘中的AOF文件。AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的,默认的文件名是appendonly.aof,可以通过appendfilename参数修改:appendfilename appendonly.aof。
AOF的工作流程:
# 解决AOF文件过大的问题 # 通过重写创建当前数据集的最小命令集合 # 触发重写: auto-aof-rewrite-percentage100# 文件增长100%时重写 auto-aof-rewrite-min-size64mb # 最小64MB才重写 # 手动重写: redis-cli>BGREWRITEAOF# redis.conf 配置 appendonly yes # 开启AOF appendfilename"appendonly.aof"# AOF文件名 # 同步策略(重要!) appendfsync always # 每个写命令都同步,最安全但性能差 appendfsync everysec # 每秒同步一次(推荐,平衡安全与性能) appendfsync no # 由操作系统决定,最快但可能丢失数据| 策略 | 数据安全 | 性能 |
|---|---|---|
| always | 最安全 | 最慢 |
| everysec | 较安全 | 推荐 |
| no | 风险高 | 最快 |
# redis.conf 完整AOF配置 appendonly yes appendfilename"appendonly.aof"appendfsync everysec # AOF重写配置 no-appendfsync-on-rewrite no # 重写时是否停止fsync auto-aof-rewrite-percentage100auto-aof-rewrite-min-size64mb # 加载时处理损坏的AOF aof-load-truncated yes # 加载截断的AOF文件 aof-use-rdb-preamble yes # 混合持久化(Redis4.0+)Redis支持两者同时开启:
BGREWRITEAOF → 先写RDB快照到AOF文件 → 追加期间的AOF命令
#1.数据安全最重要 appendonly yes appendfsync always # 或 appendfsync everysec+频繁的RDB备份 #2.性能最重要 appendonly no save9001# 较少的RDB备份 #3.内存有限,需要快速重启 appendonly no dbfilename dump.rdb rdbcompression yes #4.推荐的生产配置(平衡型) appendonly yes appendfsync everysec auto-aof-rewrite-percentage100auto-aof-rewrite-min-size64mb save9001save30010save6010000👉这是生产环境的推荐方案。
#4.推荐的生产配置(平衡型) appendonly yes appendfsync everysec auto-aof-rewrite-percentage100auto-aof-rewrite-min-size64mb save9001save30010save6010000