美文网首页
redis_持久化存储

redis_持久化存储

作者: 魔曦帝天 | 来源:发表于2019-11-25 21:08 被阅读0次

Redis 分别提供了 RDBAOF两种持久化机制:

RDB 将数据库的快照(snapshot)以二进制的方式保存到磁盘中
AOF 则以协议文本的方式,将所有对数据库进行过写入的命令(及其参数)记录到 AOF 文件
以此达到记录数据库状态的目的。

/usr/bin/redis-server /etc/redis/redis.conf(指定配置文件启动redis)
建议cp一份配置文件,启动时redis指定

RDB

主动执行 save 命令

image.png

主动执行 bgsave 命令 (异步,非阻塞 )

image.png

关于 RDB 备份的配置信息
(/etc/redis.conf)

# 时间策略
save 900 1
save 300 10
save 60 10000

# 文件名称
dbfilename dump.rdb

# 文件保存路径
dir /home/work/app/redis/data/

# 如果持久化出错,主进程是否停止写入
stop-writes-on-bgsave-error yes

# 是否压缩
rdbcompression yes

# 导入时是否检查
rdbchecksum yes

配置其实非常简单,这里说一下持久化的时间策略具体是什么意思。

save 900 1 表示900s内如果有1条是写入命令,就触发产生一次快照,可以理解为就进行一次备份
save 300 10 表示300s内有10条写入,就产生快照

关于压缩的配置rdbcompression yes ,建议没有必要开启,毕竟Redis本身就属于CPU密集型服务器,再开启压缩会带来更多的CPU消耗,相比硬盘成本,CPU更值钱。

假如你的 Redis 服务器允许客户端可以从非本机访问,应该在配置文件中,把 protected-mode 的值设置问 no。
这样的话,客户端就可以从其他主机访问 Redis 服务器了,并且不需要密码

AOF

特点:AOF 文件保存了 Redis 的数据库状态, 而文件里面包含的都是符合 Redis 通讯协议格式的命令文本。

AOF 保存的模式
Redis 目前支持三种 AOF 保存模式,它们分别是:
AOF_FSYNC_NO :不保存。
AOF_FSYNC_EVERYSEC :每一秒钟保存一次。(生产中一般选这种)
AOF_FSYNC_ALWAYS :每执行一个命令保存一次

image.png

一种是手动触发,一种是配置文件执行

配置文件详解

# 是否开启aof
appendonly yes

# 文件名称
appendfilename "appendonly.aof"

# 同步方式
appendfsync everysec

# aof重写期间是否同步
no-appendfsync-on-rewrite no

# 重写触发配置
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# 加载aof时如果有错如何处理
aof-load-truncated yes

# 文件重写策略
aof-rewrite-incremental-fsync yes

还是重点解释一些关键的配置:

appendfsync everysec 它其实有三种模式:

always:把每个写命令都立即同步到aof,很慢,但是很安全
everysec:每秒同步一次,是折中方案 (生产中一般使用)
no:redis不处理交给OS来处理,非常快,但是也最不安全
一般情况下都采用 everysec 配置,这样可以兼顾速度与安全,最多损失1s的数据。

aof-load-truncated yes 如果该配置启用,在加载时发现aof尾部不正确是,会向客户端写入一个log,但是会继续执行,如果设置为 no ,发现错误就会停止,必须修复后才能重新加载。

注意:无论是RDB还是AOF都是先写入一个临时文件,然后通过 rename 完成文件的替换工作。

AOF重写机制

rewrite是AOF的一个机制,用来压缩aof文件,

通过fork一个子进程,重新写一个新的aof文件,该次重写不是读取旧的aof文件进行复制,
而是将读取内存中的redis数据库,重写一份aof文件,有点类似于rdb的快照方式;

触发机制为:

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

解释:当rof文件的大小,比旧aof文件大百分之百的时候(2倍),且aof文件的大小大于64mb的时候,触发重写机制;

查看 AOF 文件

[root@s1 ~]# head appendonly.aof
*2
$6
SELECT
$1
0
*3
$3
SET
$5
hello

从持久化中恢复数据

其实想要从这些文件中恢复数据,只需要重新启动Redis即可

恢复机制

image.png

在线上我们到底该怎么做?我提供一些自己的实践经验。

1.如果Redis中的数据并不是特别敏感或者可以通过其它方式重写生成数据,可以关闭持久化,如果丢失数据可以通过其它途径补回;
2. 自己制定策略定期检查Redis的情况,然后可以手动触发备份、重写数据;

3.单机如果部署多个实例,要防止多个机器同时运行持久化、重写操作,防止出现内存、CPU、IO资源竞争,让持久化变为串行;

4.可以加入主从机器,利用一台从机器进行备份处理,其它机器正常响应客户端的命令;

5.RDB持久化与AOF持久化可以同时存在,配合使用。

关闭RDB和AOF存储

*关闭rdb的命令:config set save ""

(或者进入配置文件将:

Save 900 1      

Save 300 10    

Save 60 10000   

注释掉,并打开save "" 的注释,使得  save ""  生效,即可关闭rdb;

)

*关闭aof的命令:config set appendfsync no

(或者进入配置文件,将appendonly设置为no,默认是 appendonly no )

(注:appendfsync 是同步机制,默认为appendfsync  everysec)
每秒同步一次写操作到aof文件中;

该两种设置查询是否已修改成功,可分别通过config get save, config get appendfsync命令来查看。

本文参考:https://juejin.im/post/5b70dfcf518825610f1f5c16
进阶阅读:https://blog.csdn.net/hguisu/article/details/8836819

相关文章

  • redis_持久化存储

    Redis 分别提供了 RDB 和 AOF两种持久化机制: RDB 将数据库的快照(snapshot)以二进制的方...

  • prometheus+influxdb+grafana

    使用influxdb 作为prometheus持久化存储和使用mysql 作为grafana 持久化存储的安装方法...

  • iOS数据持久化

    Title: iOS数据持久化 ##数据持久化概念 数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型...

  • reactnative 数据持久化(一)

    rn 数据持久化 数据持久化 data 》 手机存储空间 rn rn中比较常用的数据持久化存储方式有两种: Asy...

  • redis-05-持久化

    [TOC] 1 Redis持久化 持久化,顾名思义就是将数据存储到存储介质中。Redis 提供了不同级别的持久化方...

  • 第六章 数据存储全方案,详解持久化技术

    6.1持久化技术简介 持久化是将内存中的数据存储在存储设备的过程.Android提供文件存储,SharedPref...

  • iOS 开发技术选型之数据库:SQLite vs. Core D

    持久化方案 在 iOS 开发中,数据持久化存储是一个很常见的需求。所谓持久化存储,就是将数据存到硬盘,使得应用重启...

  • 持久化存储

    一、理解存储卷 Volume(存储卷)是Pod中能够被多个容器访问的共享目录。解决了容器崩溃时文件丢失(容器中的文...

  • iOS数据存储

    iOS数据存储 持久化存储 概述: 持久化存储——将数据保存在硬盘里,当应用程序重启后可以访问到之前存储的数据。是...

  • HDFS内存存储 LAZY_PERSIST

    hdfs内存存储的策略是异构持久化(LAZY_PERSIST),在内存存储新数据的同时,持久化先前存储的数据,新的...

网友评论

      本文标题:redis_持久化存储

      本文链接:https://www.haomeiwen.com/subject/mbqjwctx.html