Redis 数据持久化的方案的实现

一、需要了解的基础

1、Redis实现数据持久化的两种实现方式:

RDB:指定的时间间隔内保存数据快照

AOF:先把命令追加到操作日志的尾部,保存所有的历史操作



二、RDB 实现 Redis数据持久化(默认方式)


1、编辑 redis.conf

注:使用whereis redis命令查看redis安装在哪个位置,然后进入redis安装目录的etc目录下,编辑redis.conf。


2、默认备份的时间间隔


3、默认备份的文件名称


4、默认备份的RDB文件位置



5、像这样,就是其中的备份文件



6、当然,也可以主动触发保存redis数据快照,操作如下


注:当然,如果是线上的redis要主动备份,建议使用bgsave命令,更多关于RDB的原理和使用 

http://www.chenxm.cc/post/526.html?segmentfault


7、缺点:

因为是特定条件下进行一次持久化(每隔一段时间),就可能会导致一旦redis崩溃,再次回复时,可能会导致部分数据丢失。

注:如果设置的备份时间间隔较短,比较耗服务器性能,如果设置的备份时间间隔较长,又可能会导致数据恢复时部分数据丢失。



三、AOF持久化方案

先把命令追加到操作日志的尾部,保存所有的历史操作。


1、相比于RDB持久化方案的优点:

(1)数据非常完整,故障恢复丢失数据少

(2)可对历史操作进行处理


2、如何开启AOF持久化模式

将redis.conf 配置文件中的appendonly 参数改为yes 后,则redis开始启动AOF数据持久化模式


设置AOF同步的方式,这里设置的默认的每秒同步一次



3、开启AOF同步模式后,备份文件是这样的


从上面可以看出,它记录了从我开启AOF后的所有操作命令


4、缺点

(1)因为AOF模式要把每一步redis命令都记录下来,所以就导致文件的体积会很大

(2)而且会导致速度低于RDB,并且恢复速度慢


四、RDB模式和AOF模式的恢复

Redis崩溃后,重启redis会自动找备份恢复文件,下图大致描述了redis重启后的过程。




总结:

在实际应用中,根据场景不同,选择的方式也不尽相同,各有优缺点。但我个人看法,RDB的快照方式相比于AOF的逐步记录模式要好一些。至于RDB丢数据的风险,我们完全可以通过控制备份的时间间隔来避免这个问题。当然,也是可以两种方式同时使用的,只是大多不会这么做。


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

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

相关文章

快速生成快递柜唯一取件码

曾管理一万多台快递柜,优化了系统中生成唯一取件码的算法。项目:https://github.com/nnhy/PickupCode新建项目,添加 Nuget 应用 NewLife.Redis ,借助其Add去重能力。代码如下:private static void Main(string[] args)…

自动调试自动编译五分钟上手

Browsersync能让浏览器实时、快速响应您的文件更改(html、js、css、sass、less等)并自动刷新页面。更重要的是 Browsersync可以同时在PC、平板、手机等设备下进项调试。 无论您是前端还是后端工程师,使用它将提高您30%的工作效率。 MD5加密&a…

六台机器搭建RedisCluster分布式集群

一、RedisCluster结构二、redis Cluster集群搭建1、修改redis.conf中需要更改的配置 bind 改成当前ip cluster-enabled yes #允许redis集群 cluster-config-file nodes-6379.conf #集群配置文件 cluster-node-timeout 15000 #集群中节点允许失联的最大时间15s 注&#xff1…

C# 的 async/await 其实是stackless coroutine

注: 最近Java 19引入的虚拟线程火热,还有很多人羡慕 go的 coroutine,很多同学一直有一个疑问: C# 有 虚拟线程或者 coroutine吗,下面的这个回答可以解决问题。这里节选的是知乎上的hez2010 的高赞回答:http…

中文词频统计

import jiebafoopen(text.txt,r,encodingutf-8)tfo.read()fo.close() wordsjieba.cut(t)dic{}for w in words: if len(w)1: continue else: dic[w]dic.get(w,0)1wc list(dic.items())wc.sort(keylambda x:x[1],reverse True)for i in range(20): print(wc[i]) 转载于:https:/…

[BZOJ1509][NOI2003]逃学的小孩

1509: [NOI2003]逃学的小孩 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 968 Solved: 489[Submit][Status][Discuss]Description Input 第一行是两个整数N(3  N  200000)和M,分别表示居住点总数和街道总数。以下M行,每行…

关闭 Visual Studio 2013 的 Browser Link 功能

什么是 Browser Link ? 这个 Browser Link 的功能就是通过一个脚本文件架起流程器和 Visual Studio IDE 之前的一个通信桥梁, 在启用 Browser Link 后, Visual Studio 会给网站注入一个 IHttpModule 模块对象, 然后在每个页面都会注册一段上…

Groove list操作-转数组,collect,each等

2019独角兽企业重金招聘Python工程师标准>>> list转换为数组 List list [a,b,c,d] def strs list as String[] println strs[0] 使用了Groovy语言,就能时不时的感受到Groovy语言在编码风格上与Java语言的不同。当然,我们首先感受到的可能就…

支持多种操作系统的新一代服务主机

一个应用需要常驻操作系统后台服务,可选框架有WindowsServiceLifeTime和SystemdLifeTime,但需要区别对待不同操作系统且需要另外写命令安装。NewLife.Agent自2008年设计以来,一直秉着简单易用的原则,不仅实现了服务框架&#xff0…

[翻译]Dapr 长程测试和混沌测试

介绍这是Dapr的特色项目,具体参见:https://github.com/dapr/test-infra/issues/11 ,在全天候运行的应用程序中保持Dapr可靠性至关重要。在部署真正的应用程序之前,可以通过在受控的混沌环境中构建,部署和操作此类应用程…

Mysql Lost connection to MySQL server at ‘reading initial communication packet', system error: 0

一、问题描述: 在服务器端可以正常连接并操作mysql,但是在windows端使用navicat工具远程ssh连接就出现下面错误。 1、服务器端: 2、windows端navicat连接 3、原因 原来我今天在做主从配置的时候,将 /etc/my.cnf 配置文件中的b…

自定义ProgressBar(圆)

2019独角兽企业重金招聘Python工程师标准>>> <lib.view.progressbar.ColorArcProgressBarandroid:layout_width"match_parent"android:layout_height"220dip"android:id"id/barInterest"android:layout_centerInParent"true&…

C# Task用法详解

概述Task是微软在.Net 4.0时代推出来的&#xff0c;Task看起来像一个Thread&#xff0c;实际上&#xff0c;它是在ThreadPool的基础上进行的封装&#xff0c;Task的控制和扩展性很强&#xff0c;在线程的延续、阻塞、取消、超时等方面远胜于Thread和ThreadPool&#xff0c;所以…

函数调用堆栈图

转载于:https://www.cnblogs.com/DeeLMind/p/7617972.html

Session的原理,大型网站中Session方面应注意什么?

一、Session和Cookie的区别 Session是在服务器端保持会话数据的一种方法&#xff08;通常用于pc端网站保持登录状态&#xff0c;手机端通常会使用token方式实现&#xff09;&#xff0c;存储在服务端。 Cookie是在客户端保持用户数据&#xff0c;存储位置是客户端&#xff08…

两圆相交求面积 hdu5120

转载 两圆相交分如下集中情况&#xff1a;相离、相切、相交、包含。 设两圆圆心分别是O1和O2&#xff0c;半径分别是r1和r2&#xff0c;设d为两圆心距离。又因为两圆有大有小&#xff0c;我们设较小的圆是O1。 相离相切的面积为零&#xff0c;代码如下&#xff1a; [cpp] view …

Python_list部分功能介绍

x.append():在列表尾部添加一个元素 x.clear():把列表清空 x.count():判断某个元素出现的次数 x.extend():合并两个列表&#xff0c;或者一个元组 x.index():获取元素下标 x.insert():指定下标添加元素 x.pop():移除某一元素&#xff0c;移除的元素可获取 x.remove():移除指定的…

一招解决开发环境问题 —— 远程容器开发指南

前言使用C作为主要开发语言的程序猿们应该会认同搭建开发环境是一件烦人的事情。为了编译一个程序不仅需要下载各种依赖包&#xff0c;还可能面临本地系统不兼容、编译器版本不一致、包版本冲突等各种问题。笔者在运营iLogtail开源社区的过程中发现开发和调试环境问题也是成员问…

UITabBarController的基本原理及使用(一)

前言 UITabBarController在iOS开发中是一个高频使用的控制器&#xff0c;典型的案例如QQ、微信均使用UITabBarController布局。本文将从一个新建工程&#xff0c;和大家一起了解UITabBarController的基本原理和使用方法。 基本概念 UITabBarController能够方便地管理多个控制器…

C# 多线程ThreadPool用法举例

概述ThreadPool是.Net Framework 2.0版本中出现的。自从Task出来以后&#xff0c;ThreadPool已经很少用了&#xff0c;但是一些老的代码或者一些古老的程序猿还是会用到他&#xff0c;所以我们可以不用它&#xff0c;但是还是有必须学习和了解他.ThreadPool用法举例static void…