叫你别随便重启Redis!!!怎么样,数据全丢了吧~~~

article/2025/10/9 13:53:20

目录

事情是这样的...

Redis持久化数据的两种模式

一、RDB模式

二、AOF模式

三、RDB和AOF之间的关系

四、问题回顾分析

那么该如何开启AOF增量备份模式呢?

解决方法:

1、登录到redis

2、在线修改AOF开关

3、查看数据


事情是这样的...

今天,跑的好好的程序突然挂球了,问了一下负责redis维护的同事。同事说,根据领导的要求,对Redis的备份模式进行了修改,开启了AOF(AppendOnlyFile)的增量备份模式。

我一听心里就慌了。。。

问他:"你是不是改了配置文件?然后。。。重启了?!?!"

同事说:“是啊”

还说:“RDB模式默认开启的,全量备份一直开着,怕什么?”

我听他说完,心里一万只羊驼掠过。。。

emmm~~~~为什么重启一下会出这么大篓子

心里当时就很崩溃~~~~

但还是强忍着跟他说了一下 Redis数据本地化的两种模式

Redis持久化数据的两种模式

一、RDB模式

1、Redis默认启用的本地化模式。

2、每隔一段时间全量备份;系统将导出的dump.rdb文件备份。

save 900 1   #900秒内 至少1个key 被更新 就全量备份RDB
save 300 10
save 60 10000

3、原理:redis会fork一个新的进程来进行rdb全量结构化。(redis本身读写是单进程的)

4、缺点:备份后和故障间 数据丢失;新fork的子进程会copy父进程里的内存数据进行备份,会造成内存瞬间翻倍。

二、AOF模式

1、AppendOnlyFile的缩写,是一种增量备份模式,Redis默认不开启。

2、类似mysql数据库的binlog,记录所有的redis操作记录

appendonly yes #开启AOF
appendfilename "appendonly.aof" #设置备份文件名
appendfsync	everysec #每秒更新一次操作记录

3、Redis会在原有进程的基础上,重新fork一个子进程进行记录

4、日志形式记录写操作;以文件追加的方式记录(在同一个备份文件上追加操作记录)

三、RDB和AOF之间的关系

1、优先级AOF>RDB

2、RDB和AOF之间是不会相互通信的

四、问题回顾分析

同事改完配置文件打开AOF

#开启AOF
appendonly yes

重启了redis--server

redis-server redis.conf

AOF在重启redis之后才开始生效。

重启之后,redis 首先加载AOF的备份文件(因为开了AOF开关),但是AOF是空的,所有Redis内存就被加载为空了。

这个时候,一旦触发或满足了RDB全量备份的条件,Redis会对整个内存数据库进行全量备份,并且覆盖掉原先的备份文件。

BUT 这个时候,Redis的内存是空的,完整RDB之后,就把空内存库全量备份 覆盖了原有的RDB备份文件。

所以,内存空了,AOF还啥都没有,之前的RDB备份文件也被覆盖了。。。

完美 平滑 不留痕迹的 技术手段删库

当时就想给这个大佬跪下了

emmm...总结一下,就是一波操作下来,重启之后的AOF占领了内存,内存又全量覆盖了之前重启之前全量备份的RDB,数据全没了。

最后,幸好redis的RDB的备份文件,每天都会备份一次,但是从上次备份到重启这段时间里的数据还是找不回来了。

-----------------End Of The Story----------------

那么该如何开启AOF增量备份模式呢?

解决方法:

在线修改AOF开关

不要随便重启Redis!!!因为重启就会涉及到Redis内存的重新加载。

1、登录到redis

#链接到redis
[root@mail ~]# redis-cli -a 123456[你的密码] -p 6379

2、在线修改AOF开关

#redis中查看AOF状态
127.0.0.1:7001> config get appendonly
1) "appendonly"
2) "no"#在线设置AOF开关为yes
127.0.0.1:7001> config set appendonly yes
OK
127.0.0.1:7001> 

3、查看数据

#数据都在
127.0.0.1:7001> keys *
1) "name"
2) "gender"
3) "age"
127.0.0.1:7001> 

而且备份文件AOF和RDB也都正常持久化中

 推荐阅读

优质资源

  • Java实现照片GPS定位【完整脚本】
  • https://download.csdn.net/download/weixin_42350212/20024262
  • Python实现照片GPS定位【完整脚本】
  • https://download.csdn.net/download/weixin_42350212/19776215
  • 女神忘记相册密码 python20行代码打开【完整脚本】
  • https://download.csdn.net/download/weixin_42350212/19871942
  • python修改证件照底色、大小、背景、抠图【完整源码】
  • https://download.csdn.net/download/weixin_42350212/19815306

【Java资源下载】

  • 【JDK5】jdk1.5x64位 windows版.zip
  • https://download.csdn.net/download/weixin_42350212/15381380
  • 【JDK6】jdk-6u45-windows-x64 jdk1.6 64位 Windows版
  • https://download.csdn.net/download/weixin_42350212/13668762
  • 【JDK7】jdk-7u72-windows-i586-32位
  • https://download.csdn.net/download/weixin_42350212/13675800
  • 【JDK8】jdk-8u131-linux-x64.tar.gz
  • https://download.csdn.net/download/weixin_42350212/13607316
  • 【JDK8】jdk-8u131-linux-x64.tar.gz
  • https://download.csdn.net/download/weixin_42350212/15809524

【python实战】

  • 【python实战】前女友婚礼,python破解婚礼现场的WIFI,把名称改成了
  • 【python实战】前女友发来加密的 “520快乐.pdf“,我用python破解开之后,却发现
  • 【python实战】昨晚,我用python帮隔壁小姐姐P证件照 自拍,然后发现...
  • 【python实战】女友半夜加班发自拍 python男友用30行代码发现惊天秘密
  • 【python实战】python你TM太皮了——区区30行代码就能记录键盘的一举一动
  • 【python实战】女神相册密码忘记了,我只用Python写了20行代码~~~

【pygame开发实战开发30例 完整源码】

  • https://download.csdn.net/download/weixin_42350212/15836285

【pygame游戏开发专栏,获取完整源码+教程】

CSDN官方学习推荐 ↓ ↓ ↓

为了帮助更多小白从零进阶 Java 工程师,从CSDN官方那边搞来了一套 《Java 工程师学习成长知识图谱》

尺寸 870mm x 560mm,知识汇总非常齐全,还可以折叠成一本书大小。


http://chatgpt.dhexx.cn/article/JxQ37EoF.shtml

相关文章

redis集群 服务器重启测试

redis集群 服务器重启测试 1、集群规划:2台服务器 每台服务器运行3个redis实例2、重启2台服务器后redis实例没有自动重启最后一对主从节点比较 重启实例后和之前的主从分配 3、再次重启2台服务器4、主从同步测试 1、集群规划:2台服务器 每台服务器运行3个…

启动redis

目录 could not connect to Redis at 127.0.0.1:6379:由于目标计算机积极拒绝,无法连接 解决办法 启动效果 今天下载了若依框架,本来想运行一下看看效果,结果出现下列问题 org.springframework.beans.factory.UnsatisfiedDependencyExcept…

Redis集群的关闭、启动、重启等相关指令

目录 关闭 启动 重启 (保留原有集群的)重启 (删除原有集群的)重启 集群相关指令 查看集群相关指令 查看集群状态信息 查看集群节点信息 关闭: 方式一:进入redis后,使用SHUTDOWN指令或SHUTDOWN SAVE指令或SHUTDOWN NOSAVE指令。 方式二(不…

docker-redis一直重启

现象 查看该容器的日志 docker logs f3be1896ecd8结论 当前mongo-redis/log下面没有redis.log 文件导致读取失败 解决方案 在mongo-redis/log目录下新建redis.log文件 遗留问题 测试发现在使用docker-compose up -d后会生成redis.log 删除当前redis.log,重启容…

Redis重启

1、启动redis 服务 redis-server所在目录 redis.conf文件路径 找到redis-cli所在目录,输入: ./redis-cli 查看服务是否启动成功 2、关闭redis 服务: ./redis-server shutdown

linux下重启redis的方法

导语: 已经将redis加入到etc下,此时服务器启动redis也启动,但是却连不上redis,所有有了以下的过程。 (学习视频分享:redis视频教程) 查看redis 状态:systemctl status redis ● redis.service - redis-…

前端H5面试题Js:JavaScript字符串的常用方法有哪些?

一、前言: 可将字符串常用的操作方法归纳为增、删、改、查,需要知道字符串的特点是一旦创建了,就不可变。 二、增 增的意思并不是说直接增添内容,而是创建字符串的一个副本,再进行操作,除了常用以及${}进行…

H5模拟面试题

HTML & HTML5 Position属性的值有哪些?怎样使用? absolute 生成绝对定位的元素,相对于static定位以外的第一个父元素进行定位。元素的位置通过”left”,”top”,”right”以及”bottom”属性进行规定。fixed 生成绝对定位的元素&…

前端H5面试题CSS:如何解决 margin“塌陷”?

一、外边距塌陷共有两种情况 ①第一种情况: 两个同级元素,垂直排列,上面的盒子给 margin-bottom 下面的盒子给 margin-top,那么他们两个的间距会重叠,以大的那个计算。 解决这种情况的方法为:两个外边距…

Java面试题十二:Java内存模型,h5移动端开发面试题

Java开发人员并不需要像C/C++开发人员,需要时刻注意内存的分配和释放,而是全权交给虚拟机(JVM)去管理,自然关于内存管理或是内存的模型、结构对Java开发来说就是一个“黑箱”。 两眼一抹黑似乎也不影响写Java的代码。但我也说过,了解一些内部的机制或者是自己认为不重要…

前端H5面试题(总结)

一、v-if 与 v-show的选择 1、v-if 和 v-show具有类似的功能,不过 v-if 才是真正的条件渲染,它会根据表达式是当地销毁或者重建元素及绑定的事件或子组件。 若表达式初始值为false,则一开始元素/组件并不会渲染,只有当条件第一次…

前端H5面试题(vue为主)

一.src和href的区别 &#xff1f; src表示引用资源&#xff0c;表示替换当前元素&#xff0c;用在img&#xff0c;script&#xff0c;iframe上&#xff0c;src是页面内容不可缺少的一部分。常用场景&#xff1a; <img src"img/girl.jpg"></img> <if…

h5面试题20道

本文转载自:http://www.cnblogs.com/HanJie0824/p/5841640.html 1.新的 HTML5 文档类型和字符集是&#xff1f; HTML5 文档类型很简单&#xff1a; <!doctype html> HTML5 使用 UTF-8 编码示例&#xff1a; <meta charset"UTF-8"> 2.HTML5 中如何嵌…

h5面试题总结

导航的解析流程 1.导航被触发。 2.在失活的组件里调用beforeRouteLeave守卫 3.调用全局的 beforeEach 守卫 4.在重用的组件里调用 beforeRouteUpdate 守卫 (2.2) 5.在路由配置里调用 beforeEnter 6.解析异步路由组件 7.在被激活的组件里调用 beforeRouteEnter 8.调用全…

H5前端面试题汇总

1.关于利用数组去重的方法,除了用最简单的set去重以外, 还有reduce,先来看一下reduce的基本使用吧 那么问题来了, 如何用reduce来给类数组对象去重呢? 2.promise是用来做什么的? promise是用来解决异步编程问题(简单说是就是解决回调地狱的), promise有三种状态: paddin…

C语言中关于fscanf()方法与fgets()方法的简单知识点总结

fscanf() int fscanf(FILE* stream, const char* format, [argument...]);fscanf()方法与scanf()方法类似。不同的是多了第一个参数&#xff0c;文件指针参数&#xff0c;后两个参数用法类似。其中要注意的是第三个参数处填写变量时&#xff0c;不要遗漏取地址符&。 要点…

C语言快速进阶C++(基本篇+STL篇)

目录 前言 用C做题的好处 using namespace std cin&#xff0c;cout头文件 变量声明 bool变量 const定义常量 string类 结构体 引用& vector set map(键值对) stack(栈) queue(队列) unordered_map和unordered_set(无序键值对和无序集合) 此思维导图来源于…

C语言fgets()函数的用法总结

从c11之后取消了gets()函数&#xff0c;用fgets()代替&#xff0c;用法有所不同&#xff0c;这里详细介绍下fgets()该如何使用。 char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream) 第一个参数为数据存放的数组&#xff0c;第二个参数为最大长度&#x…

C语言一行语句太长的换行处理方法

文章目录 1、C语言中代码的多行书写2、获取视频教程3、版权声明 1、C语言中代码的多行书写 对C语言初学者来说&#xff0c;编写的程序的功能很简单&#xff0c;一句代码很短&#xff0c;但是在实际开发中&#xff0c;参数往往很长很多&#xff0c;一句代码可能会很长&#xff…

(c语言)fgest()键盘获取后解决换行符'\n'的问题

fgets是会读取回车换行符的。有时候我们并不希望在字符串中存在换行符。 #include <stdio.h>int main (int argc,char *argv[]) {char str[30]"";//scanf("%s",str);printf("随便输入一个字符串呗&#xff1a;");fgets(str,sizeof(str),s…