Redis数据库【二】持久化

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 文章目录前言RDBAOF

前言

什么是持久化?

为什么需要持久化?

众所周知Redis数据库中的数据都是存放在内存中,这种方式效率虽高,但是存在一个非常严重的问题,那就是如果突然停电,数据不久没了吗,所以…

持久化派上用场了,我们需要将我们的数据备份到硬盘上,防止断电或是机器故障导致的数据丢失。

持久化的实现方式有两种:

  1. RDB:直接保存当前已经存储的数据,相当于复制内存中的数据到硬盘上,需要恢复数据时直接读取即可;
  2. AOF:保存我们存放数据的所有过程,需要恢复数据时,只需要将整个过程完整地重演一遍就能保证与之前数据库中的内容一致。

RDB

save
-- 在执行过程中会占用一定时间,但是也可以单独开一个进程
bgsave

命令执行后,会在服务端目录下生成一个dump.rdb文件,

文件中保存了内存中存放的数据,

当服务器重启后,会自动加载里面的内容到对应数据库中。保存后我们可以关闭服务器:

shutdown

大致流程

不是所以方法都是十全十美的,肯定是有缺点的,当数据库的数据量太大,那么复制一次就需要花费大量的时间。所以我们可以设置每隔一段时间自动进行保存。

save 10 66 # 10秒)内有66个写入

AOF

虽然RDB能够很好地解决数据持久化问题,但是它的缺点也很明显:每次都需要去完整地保存整个数据库中的数据,同时后台保存过程中也会产生额外的内存开销,最严重的是它并不是实时保存的,如果在自动保存触发之前服务器崩溃,那么依然会导致少量数据的丢失。

而AOF就是另一种方式:

它会以日志的形式将我们每次执行的命令都进行保存,服务器重启时会将所有命令依次执行,通过这种重演的方式将数据恢复,这样就能很好解决实时性存储问题。

AOF持久化策略(默认每秒):

在redis.windows.conf修改参数

appendfsync always 
--同步持久化,每次发生数据变更会被立即记录到磁盘,性能差但数据完整性比较好
appendfsync everysec 
--(异步操作,每秒记录,如果一秒钟内宕机,有数据丢失)
appendfsync no 
--(将缓存回写的策略交给系统,linux 默认是30秒将缓冲区的数据回写硬盘的)
appendonly yes
# appendfsync always
appendfsync everysec
# appendfsync no

但是AOF的缺点也很明显,每次服务器启动都需要进行过程重演,相比RDB更加耗费时间,并且随着我们的操作变多,不断累计,可能到最后我们的aof文件会变得很大。但是我们也有相应的办法来解决。

Redis有一个AOF重写机制进行优化,比如我们执行了这样的语句:

lpush test 666
lpush test 777
lpush test 888

实际上用一条语句也可以实现

lpush test 666 777 888

也可以在配置文件中配置自动重写

# 百分比计算
auto-aof-rewrite-percentage 100
# 当达到这个大小时,触发自动重写
auto-aof-rewrite-min-size 64mb

最后我们再来进行一下总结:

  • AOF:
  • 优点:存储速度快、消耗资源少、支持实时存储
  • 缺点:加载速度慢、数据体积大
  • RDB:
  • 优点:加载速度快、数据体积小
  • 缺点:存储速度慢大量消耗资源、会发生数据丢
相关实践学习
基于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
目录
打赏
0
0
0
0
0
分享
相关文章
|
10天前
|
Redis的两种持久化方式---RDB、AOF
通过本文的介绍,我们详细讲解了Redis的两种主要持久化方式:RDB和AOF。每种方式都有其独特的优缺点和适用场景。在实际应用中,可以根据具体需求选择合适的持久化方式,或者同时启用RDB和AOF,以达到最佳效果。希望本文能帮助您更好地理解和应用Redis的持久化机制,构建高效、可靠的数据存储解决方案。
124 79
|
2月前
|
Redis 持久化揭秘:选择 RDB、AOF 还是混合持久化?
Redis 是一个内存数据库,意味着它主要将数据存储在内存中,从而能够提供极高的性能。然而,作为内存数据库,Redis 默认情况下的数据不会永久保存。为了确保数据在重启或故障后能够恢复,Redis 提供了几种 **持久化机制**。这些机制允许 Redis 将内存中的数据保存到硬盘上,从而实现数据持久化。
152 22
Redis 持久化揭秘:选择 RDB、AOF 还是混合持久化?
|
2月前
|
redis持久化策略
Redis 提供了两种主要的持久化策略:RDB(Redis DataBase)和AOF(Append Only File)。RDB通过定期快照将内存数据保存为二进制文件,适用于快速备份与恢复,但可能因定期保存导致数据丢失。AOF则通过记录所有写操作来确保数据安全性,适合频繁写入场景,但文件较大且恢复速度较慢。两者结合使用可增强数据持久性和恢复能力,同时Redis还支持复制功能提升数据可用性和容错性。
73 5
|
3月前
|
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
69 5
【赵渝强老师】Redis的AOF数据持久化
Redis 是内存数据库,提供数据持久化功能,支持 RDB 和 AOF 两种方式。AOF 以日志形式记录每个写操作,支持定期重写以压缩文件。默认情况下,AOF 功能关闭,需在 `redis.conf` 中启用。通过 `info` 命令可监控 AOF 状态。AOF 重写功能可有效控制文件大小,避免性能下降。
110 6
【赵渝强老师】Redis的RDB数据持久化
Redis 是内存数据库,提供数据持久化功能以防止服务器进程退出导致数据丢失。Redis 支持 RDB 和 AOF 两种持久化方式,其中 RDB 是默认的持久化方式。RDB 通过在指定时间间隔内将内存中的数据快照写入磁盘,确保数据的安全性和恢复能力。RDB 持久化机制包括创建子进程、将数据写入临时文件并替换旧文件等步骤。优点包括适合大规模数据恢复和低数据完整性要求的场景,但也有数据完整性和一致性较低及备份时占用内存的缺点。
157 6
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
70 2
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
|
4月前
|
LangChain-18 Caching 将回答内容进行缓存 可在内存中或数据库中持久化缓存
LangChain-18 Caching 将回答内容进行缓存 可在内存中或数据库中持久化缓存
62 6
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
48 2

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等