首页 > 数据库 >Redis持久化

Redis持久化

时间:2024-08-16 17:37:41浏览次数:12  
标签:AOF 持久 方式 Redis RDB 快照

1、为啥需要持久化?

  因为Redis服务是使用内存存储的,一旦Redis Server停止工作或者服务重启等问题,Redis Server使用的内存将被清空,数据也就丢失了。所以持久化是保证数据备份的关键。

2、Redis持久化有哪些方式?

  Redis提供了两种持久化方式——RDB(快照持久化方式)和AOF(日志型的实时持久化方式)。

3、什么是RDB?

   Redis的RDB持久化方式是将某个时间点上Redis中的数据以快照的形式保存在硬盘上。可以将快照看作是Redis中的一张静态的图片,图片中记录了快照时刻Redis中的所有数据。

  3.1、RDB实现原理

    RDB是Redis的快照持久化方式。当Redis需要进行快照操作时,它会fork出一个子进程,负责将快照写入磁盘,而父进程则继续处理请求。由于Redis使用了写时复制(COW)的技术,所以子进程只需要复制到父进程中发生过改变的数据页,而不是复制整个Redis进程的内存空间。因此,这个过程不会对父进程的性能造成较大的影响。

  3.2、RDB的优点

    RDB持久化方式对于大规模数据的备份非常高效,因为它只需要在一定时间间隔内将Redis当前的数据生成一个快照,就可以将这个快照存档到磁盘中。而且,快照文件通常比AOF文件更小,这意味着它们的恢复速度会更快。

    它还可以在处理大量数据的情况下节省CPU资源,并且可以非常准确地回滚数据到某个特定的时间点。因为只有一个文件需要处理,因此维护每个版本的数据非常简单,以及在维护Redis集群时,各节点上的RDB文件可以按照需要进行传输和重备份。

  3.3、RDB的缺点

    RDB持久化方式不太适合用作实时数据备份的解决方案,就算在数据较快的交易场景也无法做到实时备份。因为在发生意外宕机时,最近一次快照备份的数据就会被丢失。

4、什么是AOF

  Redis的AOF持久化方式是一种日志型的实时持久化方式。在Redis使用AOF方式时,每当Redis执行了一条修改数据的指令时,它就会将这条指令以命令的形式写入到一个AOF文件中,当Redis需要恢复数据时,会执行AOF文件中所有的指令。

    4.1、AOF实现原理

      AOF是Redis服务器的一个追加文件,Redis对执行的每个写命令在这个文件的结尾添加一条日志记录。而当Redis需要在服务器启动时或者重启时重建数据集时,将会按照写命令在文件中的顺序将日志文件中的命令重新执行一遍。

    4.2、AOF的优点

      AOF持久化方式会记录所有的修改操作,并且在Redis各项命令执行完毕后才会写入AOF文件,并没有延时。由于这个原因,即使在发生意外宕机时,最后一条日志条目也不会丢失。这种持久化方式足以极大程度上减少数据丢失的风险。

      此外,AOF持久化方式还可以在增量模式下运行,这个模式下,Redis只会在master节点上执行。它只包含对现有数据的修改,而RDB在执行快照操作时,需要将整个Redis的内存全部写入到磁盘,因此AOF的处理速度通常比RDB快。

    4.3、AOF的缺点

      相比RDB方式,AOF方式虽然在进行数据备份时更加实时和精确,但是也因为历史执行过的所有指令都必须保存,会导致文件变得更加庞大和臃肿。因此,AOF恢复速度较RDB慢,且文件需要定期进行重写,否则文件大小会无限制增长。

5、两种持久化方式的选择

  通过对比两种持久化方式的优缺点,我们可以发现,在实际的应用环境中使用哪种持久化方式,应根据实际场景来决定。比如,对于对所有数据备份都十分在意的应用场合,我们可以使用AOF持久化方式来避免数据的丢失,因为它可以在实时记录所有修改指令的情况下,保证了数据的完整性。而在快速备份和数据恢复速度重要的场合,推荐使用RDB持久化方式。因为RDB生成的快照文件较小,恢复速度快,在处理大规模数据的情况下,可以大大减少CPU的负担。

  以最常用的互联网行业为例:对于互联网行业中的用户行为数据,因为需要实时访问和修正,建议使用AOF方式进行持久化,由于持久化过程中具有一定的延时,因此在快照备份的情况下,应该适量减少备份周期;对于系统配置数据,由于配置数据相对比较小,使用RDB持久化方式更为合适。

6、总结

  在实际应用中,RDB与AOF方式可以作为完全不同的两种备份方案,依据各自优缺点与传输数据的需求进行选择。虽然对于绝大部分的Redis应用,在容错方面还是有RDB和AOF两种方式同时启动才能实现全面的保护,但是掌握这两种方式的差异性和适用范围,有助于更好地理解Redis数据的传输。

最后,总结一下:

  1. RDB与AOF并无取代关系,可以同时启用来实现全方位数据备份;

  2. RDB生成的快照文件较小,恢复速度快,在处理大规模数据的情况下,不会对CPU造成大的影响;

  3. AOF通过实时记录所有修改指令,保证数据的完整性,但是会导致文件变得更加庞大和臃肿,需要定期进行重写。

  4. 实际应用中应根据具体场景选择合适的数据备份方式。

标签:AOF,持久,方式,Redis,RDB,快照
From: https://www.cnblogs.com/miskey/p/18363283

相关文章

  • redis实现接口幂等性设计
    上代码/**接口幂等性设计*/@RestControllerpublicclassIdempotentController{@AutowiredprivateRedisTemplate<String,String>redisTemplate;/***提交接口,需要携带有效的token参数*/@PostMapping("/submit")publicStringsubm......
  • 订单支付倒计时redis实现
    订单支付倒计时redis实现@GetMapping("/addOrder")publicStringaddOrder(){//创建订单...数据库操作//订单ID存到Redis,存30分钟redisTemplate.opsForValue().set("orderId1234","添加的订单",30,TimeUnit.MINUTES);retu......
  • Redis缓存异常及解决方案
    本文分享自天翼云开发者社区《Redis缓存异常及解决方案》,作者:l****n本文向读者解释了Redis使用过程中,数据不一致、缓存雪崩、缓存击穿和缓存穿透等问题的定义,并给出对应的解决方案。1、数据不一致 一致指的是:缓存中有数据,那么,缓存的数据值需要和数据库中的值相同;缓存中本身......
  • Redis介绍
    Redis一、介绍1.1基本了解RemoteDictionaryServer(远程字典服务)是完全开源的,使用ANSIC语言编写遵守BSD协议,是一个高性能的Key-Value数据库提供了丰富的数据结构,例如String、Hash、List、Set、SortedSet等等。数据是存在内存中的,同时Redis支持事务、持久化、LUA脚本、......
  • redis启动失败报错:Job for redis.service failed because the control process exited
    问题描述启动报错如下:查看redis的启动信息:systemctlstatusredis.service或journalctl-xe由提示可以看不是配置文件,内存等原因造成的。解决方案原因:linux的一个安全子系统(SELinux)阻止了服务的启动。查看SELinux的工作模式cat /etc/selinux/configSELinu......
  • Redis数据结构ZipList详解、ZipList的连锁更新问题
    ZipListZipList是一种特殊的“双端链表”,由一系列特殊编码的连续内存块组成。可以在任意一端进行压入/弹出操作,并且该操作的时间复杂度为O(1)。属性类型长度用途zlbytesuint32_t4字节记录整个压缩列表占用的内存字节数zltailuint32_t4字节记录压缩列表表尾节点距离压......
  • Redis数据结构:动态字符串SDS、Intset、Dict详解
    动态字符串:我们都知道Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。不过Redis没有直接使用C语言中的字符串,因为C语言字符串存在很多问题:获取字符串长度的需要通过运算非二进制安全不可修改Redis构建了一种新的......
  • redis哨兵,集群和运维
    RedisSentinel(哨兵)7.1哨兵介绍Sentinel介绍redis的主从模式下,主节点一旦发生故障不能提供服务,需要人工干预,将从节点晋升为主节点同时还需要修改客户端配置。对于很多应用场景这种方式无法接受。Sentinel(哨兵)架构解决了redis主从人工干预的问题。redissentinel是redis的高......
  • 基于Spring AOP与Redisson的令牌桶限流注解实践
    1.什么是限流举个例子......
  • Redis集群之Redis分片集群
    前序:Redis集群搭建直接一步到位:支持海量数据以及高并发写分片集群顾名思义,将数据分开存储到Redis集群中,这样能够存储更多的数据,避免浪费资源,基础搭建如:三主三从(一拖一)、三主六从(一拖二),本次搭建采用一拖一,一拖二情况可根据文末图文介绍进行添加从节点即可cluster不能选择db,只......