返回顶部
首页 > 资讯 > 数据库 >redis学习3---持久化
  • 371
分享到

redis学习3---持久化

2024-04-02 19:04:59 371人浏览 薄情痞子
摘要

1、默认持久化表示在900s存一个对象,300s存10个对象,60s存10000个对象时就会自动触发RDB的持久化save 900 1save 300 10save 60 10000快照文件名,可自定义db

1、默认持久化

表示在900s存一个对象,300s存10个对象,60s存10000个对象时就会自动触发RDB的持久化

save 900 1

save 300 10

save 60 10000


快照文件名,可自定义

dbfilename dump.rdb


快照文件保存目录

dir ./


如果bgsave出现错误,是否停止写入,一般都配置为yes

stop-writes-on-bgsave-error yes


开启压缩rdb

rdbcompression yes 


检验和

rdbchecksum yes


如果想要关闭快照持久化,做下面修改:

注释快照持久化规则

#save 900 1

#save 300 10

#save 60 10000


设置为空

save ""


之后重启Redis


备份 save 说明:

可以使用 SAVE 和 BGSAVE 命令手动备份,两者有区别 : SAVE命令表示使用主进程将当前数据库快照到dump文件 , BGSAVE命令表示,主进程会fork一个子进程来进行快照备份。前者会阻塞主进程,而后者不会,所以一般使用BGSAVE进行手动备份。


可以使用命令关闭db,不需要重启服务

config set save ""


查看是否生效

config get save


2、如果想使用aof方式做持久化

开启appendonlylog,开启的话每次写操作会记一条log。相当于Mysql的binlog;不同的是,每次redis启动都会读此文件构建完整数据。即使删除rdb文件,数据也是安全

appendonly no

>>

appendonly yes 


aof文件保存目录和文件名可以自定义

dir ./

appendfilename "appendonly.aof"


aof策略,每秒钟强制写入磁盘一次

appendfsync everysec


在重写时是否不需要append,这个配置需要根据实际权衡,因为在重写的同时进行append会有性能开销,当然如果不append也可能会丢失少量数据,以性能为优先的时候关闭append

no-appendfsync-on-rewrite no

>>

no-appendfsync-on-rewrite yes


使用命令关闭aof

config set appendfsync no 


查看是否生效

config get appendfsync


3、RDB和AOF方式持久化比较

RDB触发机制:

save(同步)

执行一条save命令,就会生成一个RDB文件

阻塞(保存是阻塞主进程,客户端无法连接redis,等SAVE完成后,主进程才开始工作,客户端可以连接)


bgsave(异步)

执行bgsave命令

fork()一个子进程在后台去创建RDB文件

不影响主进程,客户端可以正常链接redis,等子进程fork执行save完成后,通知主进程,子进程关闭。


RDB持久化是指在指定的时间间隔内将内存中的数据和操作通过快照的方式保存到dump.rdb文件,RDB 是一个非常紧凑(compact)的文件,本身文件比较小, 这种文件非常适合用于进行备份。恢复直接载入到内存即可,所以恢复数据比较快。但是如果服务器在非备份时间跨度内发生了故障,无法做到对当前状态的实时保存,导致数据丢失,另外遇到宕机等情况的时候快照的数据可能会不完整。每次保存 RDB文件时,save会阻塞Redis, bgsave不会阻塞Redis,但是需要 fork()出一个子进程,由子进程来执行具体的持久化工作,在数据集比较庞大时,fork()可能会非常耗时,造成服务器在某某毫秒内停止处理客户端,对CPU资源消耗较大,甚至可能使得这种停止时间长达整整一秒。


AOF持久化是在每次接受到的写命令通过 write函数追加到appendonly.aof文件,使用策略可以最大限度的保证意外情况下的数据完整性,每秒钟一次 fsync ,或者每次执行写入命令时 fsync。AOF 的默认策略为每秒钟 fsync 一次,在这种配置下,Redis 仍然可以保持良好的性能,并且就算发生故障停机,也最多只会丢失一秒钟的数据,( fsync 会在后台线程执行,所以主线程可以继续努力地处理命令请求)。因为 AOF 的运作方式是不断地将命令追加到文件的末尾,恢复数据就是逐条的执行命令,所以随着写入命令的不断增加, AOF 文件的体积也会变得越来越大,也会使得恢复过程变得漫长。


两种方式恢复数据:

RDB:

制定策略,自动定时的把dump.rdb文件备份到备机上,恢复过程就是把备机的文件拷贝到redis服务器快照文件存放目录下,命名为dump.rdb,然后启动redis服务即可。


AOF:

假如当不小心执行了 flushall 清除了所有的数据后,打开 appendonly.aof 的文件,删除末尾的命令 flushall ,最好利用 redis-check-aof这个工具来检测一下你修改过后的 aof 文件是否正常,以防启动恢复数据的时候出错,显示 AOF is valid aof 说明文件是有效的,那么可以重启 redis 恢复数据了。


两种方式选择:

只做缓存,如果希望数据在服务器运行的时候存在,可以不使用任何持久化。


如果可以忍受一段时间的数据丢失可以使用RDB方式


如果要求数据实时备份,就需要选择AOF方式


建议同时开启两种持久化:

在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据

不建议只使用AOF,因为AOF持久化存在潜在的BUG

RDB文件用作后备用途,建议只保留 save 900 1 这条规则

应该尽量减少AOF rewrite的频率,AOF重写的基础大小默认值64M太小,可以设到5G以上。默认超过原大小100%大小时重写可以改到适当的数值。


4、解决redis aof文件过大的问题

执行BGREWRITEAOF命令对redis的AOF进行重写

redis-cli BGREWRITEAOF


AOF重写:

(1) 随着AOF文件越来越大,里面会有大部分是重复命令或者可以合并的命令(100次incr = set key 100)

(2) 重写的好处:减少AOF日志尺寸,减少内存占用,加快数据库恢复时间。


执行一个 AOF文件重写操作,重写会创建一个当前 AOF 文件的体积优化版本。

即使 BGREWRITEAOF 执行失败,也不会有任何数据丢失,因为旧的 AOF 文件在 BGREWRITEAOF 成功之前不会被修改。


默认自动触发重写规则

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb


percentage是指,当redis当前的aof文件大小相对于上一次进行rewriteaof操作时的大小增长率大于100%时,就会进行rewrite。

但是,当增长率大于了100%,实际上aof文件其实很小,这样rewrite就没有必要了,所以,还需要设置一个min-size,当redis的增长率大于100%,并且min-size的大于64mb时,就会执行rewriteaof操作。


5、RDB和AOF其他

5.1、重写

如果想关闭rewriteaof操作,可以将percentage设置为0。


redis会在以下三个时候进行rewrite操作

Redis接收到客户端发送的bgrewriteaof命令

Redis aof文件增长率和增长大小达到auto-aof-rewrite

Redis接收到客户端发送的”CONFIG SET appendonly yes”命令


5.2、 数据恢复顺序

当redis重启时,会按照以下优先级进行启动:


如果只配置AOF,重启时加载AOF文件恢复数据;

如果同时 配置了RBD和AOF,启动是只加载AOF文件恢复数据;

如果只配置RBD,启动时将加载dump文件恢复数据。


5.3、AOF配置文件损坏修复方法

对于错误格式的AOF文件,先进行备份,然后采用redis-check-aof--fix命令进行修复,修复后使用diff-u对比数据的差异,找出丢失的数据,有些可以人工修改补全。AOF文件可能存在结尾不完整的情况,比如机器突然掉电导致AOF尾部文件命令写入不全。Redis为我们提供了aof-load-truncated配置来兼容这种情况,默认开启。加载AOF时,当遇到此问题时会忽略并继续启动。


您可能感兴趣的文档:

--结束END--

本文标题: redis学习3---持久化

本文链接: https://lsjlt.com/news/39654.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • redis学习3---持久化
    1、默认持久化表示在900s存一个对象,300s存10个对象,60s存10000个对象时就会自动触发RDB的持久化save 900 1save 300 10save 60 10000快照文件名,可自定义db...
    99+
    2024-04-02
  • Redis学习之持久化
    简介 持久化是将内存中的瞬时数据,转换为存储在磁盘上的持久数据。redis是一个将数据存储在内存中的数据库,这也是它高效率的原因之一。但是将数据存储在内存,如果遇到突发事件,可能会造成数据的丢失。所以我们需要将数据持久化,等下次redis启...
    99+
    2019-03-12
    Redis学习之持久化
  • Redis学习笔记(八) RDB持久化
    Redis是内存数据库,它将自己的数据库状态存储在内存里面,所以如果不想办法将存储在内存中的数据库状态保存到磁盘,那么服务器 进程一旦退出,服务器中的数据库状态也会消失不见。 为了解决这个问题,Redis提供了RDB持久化功能,这...
    99+
    2019-01-14
    Redis学习笔记(八) RDB持久化
  • Redis学习笔记(九) AOF持久化
    除了RDB持久化功能之外,Redis还提供了AOF持久化功能。与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的。   服务器在启动时,可以通过载入...
    99+
    2019-11-21
    Redis学习笔记(九) AOF持久化
  • redis学习7---持久化相关测试RDB方式
    1、redis 只做缓存配置注释掉RDB持久化的配置添加内存配置和回收配置 (maxmemory  和 maxmemory-policy)2、测试RDB持久化2.1、关闭RDB持久化测试编辑配置文件# 关闭...
    99+
    2024-04-02
  • Redis 的持久化
    原文链接: https://www.changxuan.top/p=1386   Redis 是一个非关系型的内存数据库,使用内存存储数据是它能够进行快速存取数据的原因之一。 在实际应用中,常有人提倡把 Redis 只作为一种能够提高用...
    99+
    2018-01-28
    Redis 的持久化
  • redis的持久化
    为什么要持久化?在不考虑服务器宕机的情况下,是不需要把内存中的数据保存到磁盘,来做持久化的。持久化,就是专门为宕机准备的补救措施。redis有rdb和aof两种持久化机制。一、RDB (Redis Data...
    99+
    2024-04-02
  • Redis之持久化
    redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化。redis支持两种持久化方式: 1、snapshotting(快照)也是默认方式。将内存中的数据以快照...
    99+
    2024-04-02
  • Redis如何监控持久化和优化持久化?
    Redis持久化过程一直是影响redis性能的常见因素,如何监控持久化以及如何优化持久化过程呢?下面我们就一起来看看吧。fork的监控及优化不管是使用哪种持久化,RDB持久化或AOF重写,主进程都会fork...
    99+
    2024-04-02
  • Redis 持久化详解
    http://www.redis.cn/topics/persistence.html 持久化 Redis 如同其他的存储组件一样,提供了两类持久化方式:快照,和全量追加日志。 RDB - 快照 在默认情况下, Redis 将数据库...
    99+
    2015-08-16
    Redis 持久化详解
  • Redis持久化机制
    1、Redis数据持久化的必要性 由于redis是基于内存的数据库,面临数据掉电易失的风险,要避免数据丢失,最好将内存数据持久化到磁盘等永久存储介质上。服务重启时,会先加载磁盘文件内的数据到内存,完成数据恢复。 2、RDB(Red...
    99+
    2020-06-06
    Redis持久化机制
  • redis数据持久化
    1 redis是内存型的数据库 redis数据放在内存中 重启服务器丢失数据 重启redis服务丢失数据 断电丢失数据 为了防止redis数据丢失, 进行持久化, 所以将数据写入到一个文件中来实现 2 rdb持久化 在配置文件中, 添加rd...
    99+
    2021-06-10
    redis数据持久化
  • redis持久化存储
    redis持久化存储 redis持久化存储 redis多被用于缓存和消息中间件,当被用作缓存时,数据的读写都是在内存中进行的,而内存一旦在主机断电或者主机重启时里面的数据将被清空,为保证数据不被丢失,r...
    99+
    2020-12-12
    redis持久化存储
  • Redis持久化之AOF
    背景:RDB不足之处1.耗时,耗性能生成快照文件耗时,load快照文件耗时Fork子进程网络开销写文件磁盘I/O开销 2.不可控,丢失数据会丢失最后一次快照最后操作的数据。 一、工作流程Redis写操作...
    99+
    2024-04-02
  • Redis之--rdb持久化
    持久化:通俗讲,下次开机还有数据,断电后不会丢失数据,存放于磁盘。 Redis:rdb快照持久化每隔N分钟或N次写操作后,从内存dump数据形成RDB文件。压缩,放在备份目录。 参数详解:从下往上看save...
    99+
    2024-04-02
  • Redis的持久化RDB
    dbfilename redis.db  //持久化的文件dir /home/redis/6379    //文件所在目录save 900 1  ...
    99+
    2024-04-02
  • redis怎么持久化
    redis怎么持久化?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。redis怎么持久化1.RDB保存多份完整备份,对 IO 影...
    99+
    2024-04-02
  • redis 详解(4)持久化
    定义 redis 所有数据保存在内存中,对数据更新将异步保存到磁盘 持久化的作用 方式 说明 快照 mysql dump,redis RDB 日志 mysql binlog,redis AOF,hbase Hlog ...
    99+
    2020-07-06
    redis 详解(4)持久化
  • redis 的持久化机制
    redis 持久化机制有两种:RDB 和 AOF。 RDB RDB 机制是对 redis 中的数据执行周期性的持久化。每个几分钟、几小时、几天生成 redis 内存中的数据的一份完整的快照。 AOF 每条写入命令作为日志,写入 aof 文...
    99+
    2015-09-25
    redis 的持久化机制
  • Redis持久化:rdb与aof
    [TOC] Redis 默认支持持久化,依据自己的方式,将缓存在内存中的数据存储在磁盘上! Redis支持两种持久化数据的方式。第一种持久化方法为时间点转储(point-in-time dump),转储操作既可以在“指定时间段内有...
    99+
    2021-09-25
    Redis持久化:rdb与aof
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作