首页 > 数据库 >Redis(五)持久化

Redis(五)持久化

时间:2022-12-09 15:58:22浏览次数:52  
标签:AOF 持久 文件 Redis redis 重写

Redis持久化

Redis持久化指的是将redis中的数据写入硬盘的过程。

1 RDB

简介

在指定的时间间隔内,将内存中的数据集快照写入磁盘,也就是snapshot,它恢复的时候是将快照文件直接读到内存。

怎么样进行的持久化?

RDB持久化采用了Linux常用的写时复制技术

Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个持久化文件替换上次持久化好的文件dump.rdb,整个过程中主进程是不进行任何IO操作的,这样一方面保证了主进程的性能不受影响,第二点是处于安全性考虑,防止持久化过程出现宕机导致数据不完整。

如果需要大规模的数据恢复,而且对于数据的完整性不是特别敏感,那么RDB方式比AOF方式更加高效。

RDB唯一的缺点是最后一次持久化的数据可能会丢失。原因是父进程结束子进程也会被撤销。

RDB配置
stop-writes-on-bgsave-error

yes:当Redis无法写入硬盘时,直接关闭Redis的写操作

rdbchecksum 完整性检查

yes:存储快照时,让redis使用CRC64算法来校验

save 在指定时间内发生了指定的次数就会执行持久化操作
EDB的备份与恢复

将临时文件(路径由redis.conf指定,默认在启动路径下生成)替换dump.rdb然后启动redis即可。

2 AOF (Append Only File)

2.1 简介

以日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写命令记录下来(读操作不记录),只许追加文件不许改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的时候就会根据AOF文件的内容从头执行到结尾以完成数据的恢复工作。

如果同时开启AOF和RDB,系统会默认获取AOF的数据(数据不会存在丢失)

2.2 AOF配置
append only 是否开启aof
appendfilename 生成的aof文件名
appendfsync 设置AOF同步频率
  • always:始终同步,每次redis都会立刻写入日志,性能较差但数据完整性比较好

  • everysec:每秒同步一次,如果宕机则本秒数据可能会丢失

  • no:redis不主动进行同步,而是交给操作系统

2.3 redis修复
redis-check-aof -fix

aof文件受损会导致redis启动失败,这时候可以使用该命令进行文件修复

2.4 Rewrite压缩

AOF采取文件追加的方式,文件会越来越大,为了避免此种情况,新增了重写机制

触发机制:当AOF文件的大小设定超过了给定的阈值,Redis就会启动文件的内容压缩,只保留可以恢复数据的最小指令集,可以使用命令bgrewriteaof

redis会记录上次aof文件的大小,默认是变为了上次文件大小的两倍并且大于64MB才会触发重写

auto-aof-rewrite-percentage : 设置重写的基准值,默认为100%,即文件达到原来的两倍的时候才进行重写

auto-aof-rewrite-min-size:设置重写的基准值,默认为64MB

例如文件70MB开始重写,然后降到50,下次会从100MB开始重写

重写虽然可以节省大量的磁盘空间,减少回复时间,但是还是有一定负担的

重写的原理:会fork一个子进程来将文件重写(也是先写临时文件再rename),redis4.0版本后的重写,就是把rdb的快照,以二进制的形式附在aof的头部,作为已有的历史数据,替换掉原来的流水账操作

标签:AOF,持久,文件,Redis,redis,重写
From: https://www.cnblogs.com/tod4/p/16969127.html

相关文章

  • Redis(四)主从复制
    主从复制简介主机数据更新之后根据配置和策略,自动同步数据到备机的Master/Slaver机制,Master以写为主,Slaver以读为主。这样的机制能够实现:读写分离:Master以写为主,Slav......
  • Redis(六)集群
    Redis集群1.1存在的问题容量不够Redis如何扩容并发写操作,Redis如何分摊当主机或者从机宕机,薪火相传、反客为主等主从模式都会导致ip发生变化,应用程序中的配置需......
  • Redis(八)redis新功能
    redis6新功能1ACLRedisACL是AccessControlList(访问控制表)的缩写,该功能允许根据可以执行的命令和访问的键来限制某些连接。2基本命令aclhelp>ACLhelp1)ACL<s......
  • Redis(七)缓存穿透、缓存击穿、缓存雪崩以及分布式锁
    应用问题解决1缓存穿透1.1访问结构正常情况下,服务器接收到浏览器发来的web服务请求,会先去访问redis缓存,如果缓存中存在数据则直接返回,否则会去查询数据库里面的数据,......
  • Redis(一)五种基本数据类型
    1NoSQl数据库1.1技术的发展技术的分类:①解决功能性问题:javase②解决扩展性问题:框架③解决性能问题:redis1.2NoSQL数据库概述NoSQL(NotOnlySQL),不仅仅是SQL,泛指......
  • Redis的数据被删除,占用内存咋还那么大?
    通过CONFIGSETmaxmemory100mb或者在redis.conf配置文件设置maxmemory100mbRedis内存占用限制。当达到内存最大值值,会触发内存淘汰策略删除数据。除此之外,当ke......
  • redis之配置
    一.基本参数1、daemonizedaeonize参数决定了Redis是否会称为一个守护进程,如果该参数值为yes,则表示Redis将会成为一个守护进程,如果该参数为no,则表示Redis不会成为一个守护......
  • redis特性/版本/删除/安装
    Redis是一个开源的高性能键值对数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,并且借助许多高层级的接口使其可以胜任,如缓存、队列系统的不同角色。​​Red......
  • 自己动手基于 Redis 实现一个 .NET 的分布式锁类库
    分布式锁的核心其实就是采用一个集中式的服务,然后多个应用节点进行抢占式锁定来进行实现,今天介绍如何采用Redis作为基础服务,实现一个分布式锁的类库,本方案不考虑Redis集......
  • redis 状态 跟踪 参数值
    1查看客户端连接信息通过执行clientlist命令来查看客户端连接信息,每行都代表一个客户端127.0.0.1:6379>clientlistid=3addr=127.0.0.1:58752fd=7name=age=19951id......