一文啃下来redis持久化的方式

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 小小又开始更文章了,今天的内容是redis持久化方式

小小又开始更文章了,今天的内容是redis持久化方式

Redis的持久化

Redis有两种持久化方式,分别为快照(RDB文件)以及追加式文件(AOF文件)
对于这两种持久化相关的知识点如下

  1. RDB持久化方式会在一个特定的间隔保存那个时间点的一个数据快照。
  2. AOF持久化方式会记录一个服务器收到的写操作,在服务启动时,这些记录的操作会逐条执行从而重建出原来的数据,写操作命令的格式和Redis协议一致,以追加方式进行保存。
  3. Redis持久化可以禁用。
  4. 两种方式的持久化同时存在的,当Redis重启时,AOF优先于RDB,即追加式文件会优先于快照式文件。

RDB 快照式文件

工作原理

  1. Redis调用fork()产生一个子进程。
  2. 子进程把数据写到一个临时的文件。
  3. 当子进程写完新的RDB文件后,会把旧的RDB文件替换掉。

优点

  1. RDB文件是一个简单的文件,其保存了某个时间点的Redis数据,相当适用于备份,可以设定一个时间点,对RDB文件进行归档,这样可以任意恢复不同时间点的文件。
  2. RDB适用于灾备,单文件可以很方便的传输到服务器上。
  3. RDB性能很好,需要持久化的时候,会fork一个子进程用于持久化,然后把持久化的工作交给子进程,自己不会又相关的I/O操作。
  4. 相比较AOF,在数据量大的情况下,RDB启动数据会更快。

缺点

  1. RDB会造成数据丢失,每五分钟一次的保存快照,若在这五分钟内因为某些原因不能工作,此时会造成数据的丢失。
  2. RDB使用fork子进程进行数据持久化,在数据量大的情况下,会花费一点时间,如果Redis进行停止服务,那么在CPU性能不好的情况下,会造成服务停止时间超过一秒。

文件路径和名称

默认文件路径会保存文件为 dump.rdb 文件,在redis目录下。
修改路径,修改配置文件redis.conf实现

# RDB文件名,默认为dump.rdb。
dbfilename dump.rdb

# 文件存放的目录,AOF文件同样存放在此目录下。默认为当前工作目录。
dir ./

保存点

可以修改配置的保存点
格式如下

save 60 1000

上面的含义是,如果redis每60秒,更改了1000次,那么就更新配置文件。

禁用格式如下

save ""

关于错误处理

如果redis,生成快照失败,那么就会接受数据,此时会返回给用户,持久化失败,此时可以进行如下的配置,禁用掉这个功能。

stop-writes-on-bgsave-error yes

关于数据压缩

默认情况下Redis会采用LZF进行数据压缩,如果需要关闭,配置如下

rdbcompression yes

数据校验

在RDB的末尾,会有一个CRC64的校验码在文件末尾,这样会保证文件的完整性,在保存的时候会失去性能,如果需要追求更高的性能,此时使用yes禁用掉,此时会把校验码改为e,加载文件的时候,看到e会直接跳过。

rdbcompression yes

手动生成快照

使用save命令会在当前线程生成RDB快照文件。
使用BGSAVE命令会在后台生成快照文件。使用LASTSAVE命令可以查到操作是否成功

127.0.0.1:6379> BGSAVE
Background saving started
127.0.0.1:6379> LASTSAVE
(integer) 1433936394

AOF

快照并不可靠,使用追加的命令,进行添加AOF。

优点

  1. 比RDB可靠,可以制定不同的同步方式。
  2. 其日志是一个纯粹的追加的文件,遇到突发情况,可以使用redis-check-aof进行修复。
  3. AOF过大的时候,会进行重写操作。
  4. AOF会把命令一条条的导入,如果误操作,可以删除最后一行,然后进行数据恢复

缺点

  1. 文件过大
  2. 同步导致性能过慢。
  3. 数据不一致

启用AOF

appendonly yes

文件路径

# 文件存放目录,与RDB共用。默认为当前工作目录。
dir ./

# 默认文件名为appendonly.aof
appendfilename "appendonly.aof"

可靠性

默认是每秒进行同步

# appendfsync always
appendfsync everysec
# appendfsync no

日志重写

当AOF文件过大的时候,例如,当计数器超过1000的时候,会进行自动的新建文件进行重写。
工作原理如下

  1. Redis调用fork 产生子进程
  2. 子进程把AOF写到一个临时的文件。
  3. 主进程持续把新的变动写入到buffer,同时旧的也写入,保证安全。
  4. 子进程完成文件重写,主进程会获得一个信号,内存的buffer自动追加到子进程生成的AOF
    设置条件如下
# Redis会记住自从上一次重写后AOF文件的大小(如果自Redis启动后还没重写过,则记住启动时使用的AOF文件的大小)。
# 如果当前的文件大小比起记住的那个大小超过指定的百分比,则会触发重写。
# 同时需要设置一个文件大小最小值,只有大于这个值文件才会重写,以防文件很小,但是已经达到百分比的情况。

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

禁用命令如下

auto-aof-rewrite-percentage 0

数据修复

如果AOF文件因为某些原因坏掉,通过如下的方式进行修复

  1. 备份AOF文件
  2. 使用redis-check-aof命令修复文件
auto-aof-rewrite-percentage 0

此时文件依旧修复完成。

快照的切换

  1. 备份一个最新的dump.rdb的文件
  2. 运行下列命令
$ redis-cli config set appendonly yes
$ redis-cli config set save ""

第一条命令,是启动AOF,即追加。
第二条命令是禁用BOF即快照。

关于备份

建议备份如下

  1. 创建定时任务,进行定时的备份快照。
  2. 定时任务运行的时候,把过旧的文件删除,只保留48个小时内的文件。
  3. 备份文件,需要换数据中心,异地保存。
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
23天前
|
存储 NoSQL 安全
Redis的两种持久化方式---RDB、AOF
通过本文的介绍,我们详细讲解了Redis的两种主要持久化方式:RDB和AOF。每种方式都有其独特的优缺点和适用场景。在实际应用中,可以根据具体需求选择合适的持久化方式,或者同时启用RDB和AOF,以达到最佳效果。希望本文能帮助您更好地理解和应用Redis的持久化机制,构建高效、可靠的数据存储解决方案。
132 79
|
3月前
|
存储 NoSQL Redis
Redis 持久化揭秘:选择 RDB、AOF 还是混合持久化?
Redis 是一个内存数据库,意味着它主要将数据存储在内存中,从而能够提供极高的性能。然而,作为内存数据库,Redis 默认情况下的数据不会永久保存。为了确保数据在重启或故障后能够恢复,Redis 提供了几种 **持久化机制**。这些机制允许 Redis 将内存中的数据保存到硬盘上,从而实现数据持久化。
179 22
Redis 持久化揭秘:选择 RDB、AOF 还是混合持久化?
|
3月前
|
NoSQL 安全 Redis
redis持久化策略
Redis 提供了两种主要的持久化策略:RDB(Redis DataBase)和AOF(Append Only File)。RDB通过定期快照将内存数据保存为二进制文件,适用于快速备份与恢复,但可能因定期保存导致数据丢失。AOF则通过记录所有写操作来确保数据安全性,适合频繁写入场景,但文件较大且恢复速度较慢。两者结合使用可增强数据持久性和恢复能力,同时Redis还支持复制功能提升数据可用性和容错性。
80 5
|
4月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
74 5
|
4月前
|
监控 NoSQL 测试技术
【赵渝强老师】Redis的AOF数据持久化
Redis 是内存数据库,提供数据持久化功能,支持 RDB 和 AOF 两种方式。AOF 以日志形式记录每个写操作,支持定期重写以压缩文件。默认情况下,AOF 功能关闭,需在 `redis.conf` 中启用。通过 `info` 命令可监控 AOF 状态。AOF 重写功能可有效控制文件大小,避免性能下降。
119 6
|
4月前
|
存储 监控 NoSQL
【赵渝强老师】Redis的RDB数据持久化
Redis 是内存数据库,提供数据持久化功能以防止服务器进程退出导致数据丢失。Redis 支持 RDB 和 AOF 两种持久化方式,其中 RDB 是默认的持久化方式。RDB 通过在指定时间间隔内将内存中的数据快照写入磁盘,确保数据的安全性和恢复能力。RDB 持久化机制包括创建子进程、将数据写入临时文件并替换旧文件等步骤。优点包括适合大规模数据恢复和低数据完整性要求的场景,但也有数据完整性和一致性较低及备份时占用内存的缺点。
194 6
|
5月前
|
存储 缓存 NoSQL
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
72 2
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
|
5月前
|
消息中间件 分布式计算 NoSQL
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
51 2
|
5月前
|
存储 缓存 NoSQL
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
106 1
|
6月前
|
存储 NoSQL 安全
8)详解 Redis 的配置文件以及数据持久化
8)详解 Redis 的配置文件以及数据持久化
76 0