redis数据丢失_有效避免数据丢失!Redis持久化方案选择详解

为什么需要持久化呢?

通常情况下redis的数据全部存储在内存中,数据库一旦故障发生重启数据会全部丢失,即使是在redis cluster或者redis sentinel模式下主从同步数据的恢复仍然需要一段时间。

cff8f52dda694c6ad4a3a34546f5e4c3.png

持久化功能在于能够有效地避免因进程退出造成的数据丢失问题,在下次重启时利用之前持久化的文件即可实现数据恢复。

开启Redis持久化之后,数据将存放到磁盘中,数据库执行增量同步的时间要远小于全量同步。在生产环境下故障的数据恢复有着非常重要的作用!

Redis数据持久化有两种方案

Redis持久化有两种方案:

  • RDB和AOF。RDB是一种快照式的数据存储,它会周期性的保存当前时间点Redis所有的数据到磁盘中。
  • AOF是一种追加式的存储方式,会实时的记录Redis的写操作到磁盘中。

这两种方案又存在什么样的区别呢?下面让小编一一道来吧~

RDB持久化

当Redis的写入触发RDB持久化条件后(也可以手动执行dgsave命令来触发),Redis主进程fork一个子进程来创建临时RDB存储文件,创建文件完成后对这个临时文件rename替换原先的RDB文件。RDB文件是一个单文件很适合数据的容灾备份与恢复,通过RDB文件恢复数据库耗时较短,通常1G的快照文件载入内存只需20s左右。

8e40e58a9e7c9b6ba74f0180c651d7e4.png

缺点:

1)RDB持久化只会周期性的保存Redis数据,当还未触发下一次存储的情况下Redis宕机,则内存中的数据会全部丢失。

2)另外当数据量较大的情况下,fork子进程这个操作很消耗cpu,如下图的监控图,每1800s触发的RDB持久化,Redis消耗的cpu都会飙升。在fork子进程过程中可能会发生长达秒级别的阻塞情况。

a0898fe719702f08aa0771c654cc3f09.png

参数:

4b171a7ce03a901b6e685b610218fca1.png

save选项如果配置为空save "",则关闭RDB持久化,这个开启RDB持久化触发条件可以配置多条,例如900秒内有1次写入触发快照/300秒内有10次写入触发快照,这个可以根据自身Redis写入情况自由配置来平衡性能与数据安全。

stop-writes-on-bgsave-error建议开启,当redis bgsave发生错误的时候拒绝客户端的请求,bgsave失败一般是磁盘或者内存空间不够,需要监控来提高数据安全性。

AOF持久化

AOF是通过保存Redis写操作的命令来实现持久化,使用AOF来持久化,Redis数据的安全性将大幅提高,异常宕机情况下最多丢失1s的数据。AOF文件记录了redis的写操作,格式清晰,易于理解和修改,利于数据的重建。

4edf094e46f4d43ba57a0fb4c0cfa647.png

缺点:

1)随着redis写入的增加,AOF存储文件会越来越大,会影响到数据库数据的恢复时间和磁盘空间等,所以我们需要配置AOF重写来缩小AOF文件的体积,这里可使用默认的两个触发条件配置或者我们可以手动调用BGREWRITEAOF命令来触发。

参数:

2934d708a04b972e400f8d83c2cc1993.png

appendonly设置是否开启AOF持久化。

appendfsync有三种持久化模式:always/everysec/no,兼顾数据存储的速度和安全性配置为everysec,每秒钟同步一次数据到磁盘中。

RDB、AOF持久化优劣势对比

两种方式各有千秋, 下面对比一下两种redis数据持久化方式:

182c664cbcb79a8ad9c00306c6c0e093.png

选择

Redis恢复数据时会先检查AOF文件是否存在,如果不存在就尝试加载RDB文件。

在实际生产环境中,根据数据量、应用对数据的安全要求、预算限制等不同情况,会有各种各样的持久化策略。如完全不使用任何持久化、使用RDB或AOF的一种,或同时开启RDB和AOF持久化等。

PS:持久化的选择必须与Redis的主从策略一起考虑,因为主从复制与持久化同样具有数据备份的功能,而且主机master和从机slave可以独立的选择持久化方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502299.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

做python开发要用多大的内存_Python 在分配内存需要考虑的问题

由此能看出可变对象在扩充时的秘密:超额分配机制:申请新内存时并不是按需分配的,而是多分配一些,因此当再添加少量元素时,不需要马上去申请新内存 非均匀分配机制:三类对象申请新内存的频率是不同的&#x…

mysql审计 社区版有吗_mysql 5.6 社区版上审计功能,不扯皮

官网https://mariadb.com/kb/en/mariadb/about-the-mariadb-audit-plugin/一、环境说明MySQL 5.6.25 社区版Mariadb 10.0.25 社区版mysql 企业版有审计功能需要收费,社区版被阉割的不行不行了,和古时候的太监没啥区别了,比较重要的功能特性都…

python用outlook自动发邮件_Python 调用outlook发送邮件(转 )

单账号: import win32com.client as win32 def send_mail(): outlook win32.Dispatch(Outlook.Application) mail_item outlook.CreateItem(0) # 0: olMailItem mail_item.Recipients.Add(testtest.com) mail_item.Subject Mail Test mail_item.BodyFormat 2 # …

win10子系统ubuntu图形界面_win10系统中安装ubuntu子系统及图形界面

作为全球最流行且最有影响力的Linux开源系统之一,Ubuntu自发布以来在应用体验方面:有较大幅度的提升,即使对比Windows、MacoS等操作系统,最新版本的Ubuntu也不逊色。下面教大家在win10系统中安装ubuntu子系统及图形界面。第一步&a…

为什么python打开pygame秒关闭后在运行_当我运行Python程序时,pygame窗口打开片刻,然后退出 - python...

我是一个刚开始尝试通过在线课程使用python和pygame制作游戏的程序员。但是,当我运行以下代码时,pygame窗口将打开一秒钟,然后关闭。 import pygame pygame.init() screen pygame.display.set_mode((900,700)) finished False while finish…

es 时间字段聚合_ES之五:ElasticSearch聚合

1、单值聚合Sum求和,dsl参考如下:{"size": 0,"aggs": {"return_balance": {"sum": {"field": "balance"}}}}返回balance之和,其中size0 表示不需要返回参与查询的文档。Min求最小值{"…

div字体居中_div和span的使用

这节我们来制作以下效果我们先把四个段落的文字都写出来,分别包含在p标签里现在看到的效果如下我们来一点一点给它加入样式首先,来使文字水平居中并且加背景色但是这样显示的效果有一些问题,直接加入文字背景会显示背景顶着两头,导…

java将mysql数据写入到txt_java 追加写入数据到txt

方法一try {BufferedWriter out new BufferedWriter(new FileWriter(fileName));out.write("aString1\n");out.close();out new BufferedWriter(new FileWriter(fileName,true));out.write("aString2");out.close();BufferedReader in new BufferedRead…

dubbo协议_Dubbo协议解析与OPPO自研ESA RPC框架实践

本文来自OPPO互联网基础技术团队,转载请注名作者。同时欢迎关注我们的公众号:OPPO_tech,与你分享OPPO前沿互联网技术及活动。1. 背景Dubbo是一款高性能、轻量级的开源Java RPC框架,诞生于2012年,2015年停止研发&#x…

fastjson反序列化过滤字段属性_原创干货 | 从RMI入门到fastjson反序列化RCE

关注我,让我成为你的专属小太阳吧RMI入门什么是RMIRMI(Remote Method Invocation)为远程方法调用,是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运…

python pyquery.get()_Python爬虫之PyQuery使用(六)

Python爬虫之PyQuery使用PyQuery简介pyquery能够通过选择器精确定位 DOM 树中的目标并进行操作。pyquery相当于jQuery的python实现,可以用于解析HTML网页等。它的语法与jQuery几乎完全相同,对于使用过jQuery的人来说很熟悉,也很好上手。初始化…

axure web组件下载_Element - 饿了么团队出品的神级桌面 UI 组件库

一套著名的桌面端的组件库,同时提供Sketch、Axure模板资源文件方便快速产品设计。 介绍由饿了么团队出品,一套为开发者、设计师和产品经理准备的组件库,提供了配套axure、sektch设计资源,可以直接下载使用,能帮我等搬砖…

三农电子商务创业创新大赛作品_全国大学生电子商务“创新、创意及创业”挑战赛五邑大学校赛...

大赛简介第十届全国大学生电子商务“创新、创意及创业”挑战赛(简称“三创赛”)是由全国电子商务创新产教联盟主办,由“三创赛”竞赛组织委员会统一策划、组织、管理与实施。“三创赛”由校赛、省赛和国赛三级竞赛组成,分别由教育部认可的全国高校提出申…

程序员的数学 pdf_作为一个程序员,分享我日常学习方式,自学渠道和方式

做了几年程序员,只有高中学生的基础,就做不了高等数学算法相关工作,在有限的技术领域里进行自学做自己能做的业务。学习是少不了的事情,每天一大部分时间都是处于自学状态。第一个平台是慕课网,从高中毕业开始看慕课网…

python中可通过()实现代码的复用_(  )是可复用的,提供明确接口完成特定功能的程序代码块。...

【填空题】PE 表示( )线,PEN表示( )线;【单选题】建筑电气工程平面图中的图例 MEB 表示( )。【其它】自己选择几个著名品牌的官方网站,进行比较归纳,整理出你认为企业官网应当设置的板块,理由是什么?【判断题】实现二十进制计数,要用到进位端Qc。(5.0分)【单选题】截平面垂直于…

apache2 wordpress目录权限_小白指南:WordPress中的用户角色和权限

WordPress本身自带了一套用户角色管理系统,这套系统定义了每个用户角色可以做什么,不可以做什么。随着网站的发展,弄懂这些用户角色和权限的问题是非常有必要的。在这篇小白指南中,我们将用图表的形式对比WordPress中每个用户角色…

mysql binary安装_mysql的二进制安装方式

mysql总共有三种安装方式,源代码安装,二进制安装和源安装。这次写的是二进制安装,对其他两种方式不予讨论。关闭selinux和防火墙上课的时候,老师说过这是重中之重,一定要先关闭selinux和iptables。如果不关闭这两个&am…

mysql分区概念_mysql的分区

在mysql 5.1.3之后引入和partition(分区)的概念。这个是个好东东。以前遇到一个大表的时候,我们会手动将其分为几个小表(就是分表操作)。但是分表操作有几个缺点:1 麻烦,这里指的麻烦是不仅对于调用分表的sql语句的处理上,也是分表…

pytest测试实战pdf_Pytest+Allure美化测试报告

今日推荐音乐:我最爱的霉霉在学习pytest的时候,生成的html报告觉得实在不是很美观,查到资料有很多测试报告的第三方插件,不仅美观而且查看测试用例也很方便,那我们一起来学习下吧~0 1参考案例要学习一个新技术&#xf…

java 递归_采用递归算法求解迷宫问题(Java版) | 附代码+视频

递归算法能够解决很多计算机科学问题,迷宫问题就是其中一个典型案例。本篇教程我们将采用递归算法求解迷宫问题,输出从入口到出口的所有迷宫路径。01用递归算法解决迷宫问题迷宫问题在《数据结构教程》第3章介绍过,设mgpath(int xi&#xff0…