当先锋百科网

首页 1 2 3 4 5 6 7

为什么要持久化

Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘中,那么一旦服务器进程退出,服务器中的数据库状态也会丢失,数据丢失是一种很严重的生产及故障,所以需要对 Redis 数据进行持久化。Redis 提供了如下几种不同级别的持久化方式

  • RDB 快照持久化可以在指定的时间间隔内生成内存数据集的时间点快照
  • AOF 持久化记录服务器执行的所有写命令,并在服务重启时通过命令重放来还原数据
  • 混合持久化,兼顾RDB和AOF的特性

RDB 快照

在默认情况下,Redis 将内存数据库快照保存在名为 dump.rdb 的二进制文件中。

可以通过修改 redis.conf 配置,让 Redis 在 N 秒内数据集至少有 M 个变动 这一条件被满足时,自动保存一次数据集。

 1、rdb触发机制

# 触发机制-主要三种方式
# save(同步)--->阻塞--》如果数据量很多---》影响redis的查询操作
save

# bgsave(异步,Backgroud saving started)


# 自动(通过配置)
配置   seconds   changes
save   900        1
save   300        10
save   60         10000

如果60s中改变了1w条数据,自动生成rdb
如果300s中改变了10条数据,自动生成rdb
如果900s中改变了1条数据,自动生成rdb

2、AOF (append-only file)

快照功能并不是非常耐久的(durable):如果 redis 因为某些原因而造成故障停机,那么服务器将丢失最近写入、且仍未保存到快照中的那些数据。

# AOF的三种策略
日志不是直接写到硬盘上,而是先放在缓冲区,缓冲区根据一些策略,写到硬盘上
always:redis–》写命令刷新的缓冲区—》每条命令fsync到硬盘—》AOF文件
everysec(默认值):redis——》写命令刷新的缓冲区—》每秒把缓冲区fsync到硬盘–》AOF文件
no:redis——》写命令刷新的缓冲区—》操作系统决定,缓冲区fsync到硬盘–》AOF文件\



# AOF 重写
本质就是把过期的,无用的,重复的,可以优化的命令,来优化
这样可以减少磁盘占用量,加速恢复速度

# aof配置
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec 
dir /root/lqz/redis/data

详细:
x深度好文:保姆级教程彻底搞懂Redis 持久化-腾讯云开发者社区-腾讯云 (tencent.com)