0

0

Redis如何实现持久化方案(RDB和AOF使用)

WJ

WJ

发布时间:2020-05-30 11:51:54

|

2816人浏览过

|

来源于51dev

转载

一、持久化的作用

1.什么是持久化

redis的所有数据保存在内存中,对数据的更新将异步的保存到硬盘上

2.持久化的实现方式

快照:某时某刻数据的一个完成备份    -mysql的Dump    -redis的RDB写日志:任何操作记录日志,要恢复数据,只要把日志重新走一遍即可    -mysql的 Binlog    -Hhase的 HLog    -Redis的 AOF

二、RDB

1.什么是RDB

20.png

2.触发机制-主要三种方式

第一种:save(同步)1 客户端输入save命令----》redis服务端----》同步创建RDB二进制文件2 会造成redis的阻塞(数据量非常大的时候)3 文件策略:如果老的RDB存在,会替换老的4 复杂度 o(n)第二种:bgsave(异步,Backgroud saving started)1 客户端输入save命令----》redis服务端----》异步创建RDB二进制文件(fork函数生成一个子进程(fork会阻塞reids),执行createRDB,执行成功,返回给reids消息)2 此时访问redis,会正常响应客户端3 文件策略:跟save相同,如果老的RDB存在,会替换老的4 复杂度 o(n)第三种:(常用方式)(******)自动(通过配置文件)配置   seconds   changessave   900        1save   300        10save   60         10000如果60s中改变了1w条数据,自动生成rdb如果300s中改变了10条数据,自动生成rdb如果900s中改变了1条数据,自动生成rdb

以上三条符合任意一条,就自动生成rdb,内部使用bgsave

#配置:

save 900 1 #配置一条

save 300 10 #配置一条

save 60 10000 #配置一条

dbfilename dump.rdb  #rdb文件的名字,默认为dump.rdb

dir ./ #rdb文件存在当前目录

stop-writes-on-bgsave-error yes #如果bgsave出现错误,是否停止写入,默认为yes

rdbcompression yes #采用压缩格式

rdbchecksum yes #是否对rdb文件进行校验和检验

#最佳配置

save 900 1

save 300 10

save 60 10000 dbfilename dump-${port}.rdb

 #以端口号作为文件名,可能一台机器上很多reids,不会乱

dir /bigdiskpath #保存路径放到一个大硬盘位置目录

stop-writes-on-bgsave-error yes

#出现错误停止

rdbcompression yes #压缩

rdbchecksum yes #校验

RDB触发机制一般使用第三种方式,但是这种方式也会有缺点。如果修改的条数没有在设置范围内那么就不会触发,就会引发很多数据没有持久化的情况。所以我们一般采用下面方式:AOF。

如果是保存不重要的数据可以使用RDB方式(比如缓存数据),如果是保存很重要的数据就要使用AOF,但是两种方式也可以同时使用。

三、AOF

1.RDB问题

耗时,耗性能。不可控,可能会丢失数据。

2.AOF介绍

客户端每写入一条命令,都记录一条日志,放到日志文件中,如果出现宕机,可以将数据完全恢复

3.AOF的三种策略

日志不是直接写到硬盘上,而是先放在缓冲区,缓冲区根据一些策略,写到硬盘上

Winston AI
Winston AI

强大的AI内容检测解决方案

下载

#第一种:always:redis--》写命令刷新的缓冲区---》每条命令fsync到硬盘---》AOF文件

#第二种:everysec(默认值):redis——》写命令刷新的缓冲区---》每秒把缓冲区fsync到硬盘--》AOF文件

#第三种:no:redis——》写命令刷新的缓冲区---》操作系统决定,缓冲区fsync到硬盘--》AOF文件

命令 always everysec no
优点 不丢失数据   
每秒一次fsync,丢失1秒数据  不用管 
缺点   
IO开销大,一般的sata盘只有几百TPS 丢1秒数据 不可控

4.AOF重写

随着命令的逐步写入,并发量的变大, AOF文件会越来越大,通过AOF重写来解决该问题

原生AOF AOF重写

set hello world

set hello java

set hello hehe

incr counter

ncr counter

rpush mylist a

rpush mylist b

rpush mylist c

过期数据

set hello hehe

set counter 2

rpush mylist a b c

  

本质就是把过期的,无用的,重复的,可以优化的命令,来优化这样可以减少磁盘占用量,加速恢复速度

实现方式

bgrewriteaof:客户端向服务端发送bgrewriteaof命令,服务端会起一个fork进程,完成AOF重写

AOF重写配置:

重写流程

21.png

AOF配置文件 (******)

appendonly yes #将该选项设置为yes,打开appendfilename "appendonly-${port}.aof" #文件保存的名字appendfsync everysec #采用第二种策略dir /bigdiskpath #存放的路径no-appendfsync-on-rewrite yes #在aof重写的时候,是否要做aof的append操作,因为aof重写消耗性能,磁盘消耗,正常aof写磁盘有一定的冲突,这段期间的数据,允许丢失

四、RDB和AOF的选择

1.rdb和aof的比较

命令 rdb aof
启动优先级 低   
高(挂掉重启,会加载aof的数据)   
体积 小 

恢复速度   
 快
数据安全性   
丢数据 
根据策略决定   
轻重   
重   

2.rdb最佳策略

rdb关掉,主从操作时
集中管理:按天,按小时备份数据
主从配置,从节点打开

3.aof最佳策略

开:缓存和存储,大部分情况都打开,
aof重写集中管理
everysec:通过每秒刷新的策略

4.最佳策略

小分片:每个redis的最大内存为4g
缓存或存储:根据特性,使用不通策略
时时监控硬盘,内存,负载网络等
有足够内存

以上就是Redis(四)——持久化方案(RDB和AOF使用)的全部内容。

相关参考:PHP中文网

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

779

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

722

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

727

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

394

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

398

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

443

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

428

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

16860

2023.08.03

俄罗斯搜索引擎Yandex最新官方入口网址
俄罗斯搜索引擎Yandex最新官方入口网址

Yandex官方入口网址是https://yandex.com;用户可通过网页端直连或移动端浏览器直接访问,无需登录即可使用搜索、图片、新闻、地图等全部基础功能,并支持多语种检索与静态资源精准筛选。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1

2025.12.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.3万人学习

Redis+MySQL数据库面试教程
Redis+MySQL数据库面试教程

共72课时 | 6.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号