本文只是小实验,不供线上使用参考

本文假定的情况是,某同学不小心手残,把redis中的一个key删掉了,想恢复被删掉的key的数据。对于mysql等数据库等,有完整的数据库日志,回滚或者看日志就可以考虑恢复,但redis没有。

实验开始:
第一步:准备redis环境

  1. 清空redis数据,清除已有的rdb和aof持久化文件

     rm appendonly.aofrm dump.rdb
    

默认的aof和rdb持久化文件分别为appendonly.aof和dump.rdb,清除这两个文件

  1. 开启aof和rdb持久化策略

     appendonly yesappendfilename "appendonly.aof"// rdb默认开启,可以配置调整参数save 900 1save 300 10save 60 10000
    
  2. 重启redis-server

第二步:测试

  • 连接redis后,通过save命令产生redis rdb备份文件,通过config set appendonly yes会产生aof文件;**

这是通过winhex打开查看的rdb文件:

nodepad打开查看的aof文件:

可以看到aof文件内容为空,rdb文件是二进制格式,查看后里面是redis rdb文件基础格式信息,没有数据。

  • 填充数据

往redis中填充数据,为方便查看,分别从a1填充到a10, 在通过save和config命令更新aof文件和rdb文件,如下:

127.0.0.1:6379> set a1 a
OK
127.0.0.1:6379> set a2 a
OK
127.0.0.1:6379> set a3 a
OK
127.0.0.1:6379> set a4 a
OK
127.0.0.1:6379> set a5 a
OK
127.0.0.1:6379> set a6 a
OK
127.0.0.1:6379> set a7 a
OK
127.0.0.1:6379> set a8 a
OK
127.0.0.1:6379> set a9 a
OK
127.0.0.1:6379> set a10 a
127.0.0.1:6379>
127.0.0.1:6379> save
OK
127.0.0.1:6379> config set appendonly yes
  • 查看aof和rdb文件情况
    理论上aof文件作为redis内存镜像应该会有内容更新,aof文件也一样。

rdb文件内容:

aof文件内容(太长了,只显示部分):

*2
$6
SELECT
$1
0
*3
$3
set
$2
a1
$1
a

从以上文件可以看出rdb文件存放的是大概是直接的key和value值,aof文件存放的操作日志,包含命令,key值和value值

  • 设置一个key值,然后删掉

    127.0.0.1:6379> config set appendonly yesOK127.0.0.1:6379> set b bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbOK127.0.0.1:6379> 127.0.0.1:6379> 127.0.0.1:6379> del b(integer) 1127.0.0.1:6379> saveOK127.0.0.1:6379> config set appendonly yes
    

rdb文件内容如下,可以看出rdb文件中内容是没有变化的:

aof文件中增加了下面下面一段操作日志,包括set b和del b两条命令:

  • 关闭redis,备份aof文件,删掉aof中最后四行,并重启

以下为最后四行的解析:

*2   // 代表del b总共分为两部分
$3  // $3代表接下来是个字符串,长度为3
del // 字符串del,长度为3
$1  //   $1代表接下来是个字符串,长度为1
b    // 字符串b,长度为1
  • *重启redis后,通过keys 查看所有的key

有b这个key:

127.0.0.1:6379> keys *1) "a1"2) "a5"3) "a8"4) "a7"5) "a4"6) "a3"7) "a10"8) "a6"9) "b"
10) "a9"
11) "a2"
127.0.0.1:6379>
  • 删掉dump.db,重启redis
    还是有b这个关键字了;

    127.0.0.1:6379> keys *1) "a4"2) "a3"3) "a10"4) "b"5) "a8"6) "a6"7) "a5"8) "a1"9) "a2"10) "a9"11) "a7"
    

这样被删的key b被恢复了,但这里有个问题,无论rdb文件存在与否,b都被恢复了,从redis启动日志看出,这里恢复数据是优先从aof文件中恢复的(DB loaded from append only file: 0.000 seconds)。

17235:M 18 Sep 18:35:31.340 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
17235:M 18 Sep 18:35:31.341 # Server started, Redis version 3.0.7
17235:M 18 Sep 18:35:31.341 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
17235:M 18 Sep 18:35:31.341 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
17235:M 18 Sep 18:35:31.341 * DB loaded from append only file: 0.000 seconds
17235:M 18 Sep 18:35:31.341 * The server is now ready to accept connections on port 6379

这里有关redis恢复机制,即在开启aof并且存在文件的情况下,优先从aof文件中恢复

  1. 如果只配置 AOF ,重启时加载 AOF 文件恢复数据;
  2. 如果同时配置了 RDB 和 AOF ,启动是只加载 AOF 文件恢复数据;
  3. 如果只配置 RDB,启动是将加载 dump 文件恢复数据。

结论:
如果要恢复删除的key,前提是需要开启aof持久化策略;在开启aof持久化策略的情况下,删不删除rdb文件没有关系。

小心操作为上,特别是线上redis

Redis恢复被删掉了的key值相关推荐

  1. oracle 存储过程误删,Oracle中怎么恢复被删掉的存储过程

    Oracle中如何恢复被删掉的存储过程? 在某些时候,容易误删存储过程,那么针对存储过程被删除了,我们如何进行恢复呢 ? 这里为大家进行讲解. 1.  创建测试存储过程 SQL> conn ro ...

  2. QQ怎么找回/恢复被删掉的好友

    QQ怎么找回/恢复被删掉的好友 工具/原料 QQ 方法/步骤  首先登录你的QQ号,打开联系人界面,找一个空白的地方右键单击,然后再出来的提示中点击好友管理器.  进入好友管理器后,左下角有一个工具& ...

  3. js json数据去重。json数据如何将相邻的一条数据的重复数据删掉,通过key判断值相等的

    数据: table:[ {code:1,value:"哈哈哈",name:"姓名一",age:"23",article:"1000 ...

  4. shell模拟php多进程从redis获取数据(一个库多个key值)

    背景:现在的数据已经写到了redis队列里面,完成了入栈的操作,后期打算从redis获取数据,完成出栈的操作,出栈后然后做一系列的逻辑处理 环境: VMware虚拟机  内存:1G   硬盘:60G  ...

  5. 计算机用户删除文件找回,文件删除了怎么找回来_文件删掉了怎么恢复-win7之家...

    有用户说在清理电脑文件的时候,不小心把一些重要的文件给删除了,想把那些文件给找回来,但不知道要怎么做,这个情况相信也有他人用户也遇到过,那么文件删除了怎么找回来呢,下面小编给大家分享恢复文件删掉的方法 ...

  6. oppo手机删除计算机怎样恢复,【数据恢复篇】oppo手机删掉的照片怎么恢复

    原标题:[数据恢复篇]oppo手机删掉的照片怎么恢复 手机删掉的照片可以恢复吗?oppo手机删掉的照片怎么恢复?很多人会奇怪oppo手机删掉的照片还能恢复吗?现在科技技术的提高,照片能够被恢复也是很简 ...

  7. redis中有key但是删不掉_Redis大 key的发现与删除方法全解析

    个推作为国内第三方推送市场的早期进入者,专注于为开发者提供高效稳定的推送服务,经过9年的积累和发展,服务了包括新浪.滴滴在内的数十万APP.由于我们推送业务对并发量.速度要求很高,为此,我们选择了高性 ...

  8. redis中有key但是删不掉_Redis大key的发现与删除方法全解析

    个推作为国内第三方推送市场的早期进入者,专注于为开发者提供高效稳定的推送服务,经过9年的积累和发展,服务了包括新浪.滴滴在内的数十万APP.由于我们推送业务对并发量.速度要求很高,为此,我们选择了高性 ...

  9. sqlyog.err文件可以删掉吗_苹果备忘录删掉的东西可以找回来吗?可以恢复被删内容的便签备忘录软件...

    苹果不但是一种水果,还是美国的一个科技公司,随着它自身不断的进步,越来越多的人们开始使用苹果公司旗下的设备.在使用苹果设备的时候,备忘录是一个很实用的辅助工具,苹果备忘录删掉的东西可以找回来吗?有没有 ...

  10. iphone照片删掉又出现_两个月前删的IPhone手机照片还有救?很简单,三招帮你轻松恢复...

    照片是我们记录生活的一种方法,而且现在手机的拍照功能也越来越强大了,大家不用再耗费高额的费用去买相机,特别是iPhone的拍照功能可以说是很出色了,所以拍照一直爽一直爽,如果手机里的照片手滑不删掉了怎 ...

最新文章

  1. python moviepy textclip中文_用Python玩转视频剪辑,秀的飞起!
  2. 刀片服务器与机架服务器对比
  3. Android之一起玩转下拉刷新控件
  4. 财务人员工资那么低,财务工作真的有价值吗?
  5. 深入阅读Mina源码(3) —— Mina之IOAdapter(二)
  6. (day 15 - 双指针)剑指 Offer 18. 删除链表的节点
  7. 在GRIDVIEW中合并单元格
  8. 零基础学会数据分析计划
  9. VTK Camera
  10. 小刘同学的第一百五十八篇日记
  11. 理财产品收益计算公式揭密,破解6种获利模式
  12. 增大图片(在图像分割、GAN、超分辨中经常用到)
  13. 《在职报考英语四六级须知》
  14. 怎样测试手机性能软件,如何检测手机性能的软件
  15. Element-UI学习之旅-Border边框及图标
  16. java 全角_java全角、半角字符的关系以及转换详解
  17. 百度红包架构分析与推测
  18. 怎样控制键盘按键自动填写网页表单
  19. 企业管理软件如何选型?看完后恍然大悟
  20. OCP-1Z0-051 第120题 NATURAL JOIN自然连接

热门文章

  1. Vue + Spring Boot 项目实战(十三):使用 Shiro 实现用户信息加密与登录认证
  2. arduino定时器控制舵机_用 Arduino 控制舵机
  3. java mysql utc时间_Java项目统一UTC时间方案
  4. 华为全球发布UMTS终端商用新品
  5. .webp格式图片详解
  6. 随机数公式Random
  7. (7)数据分析-秩和检验
  8. if函数3个条件3个结果C语言,if函数3个条件嵌套公式 包括60为及格否则为不及格...
  9. STM32---FLASH闪存
  10. python爬取学籍信息_小学 学生学籍信息汇总及自动检查代码(Python)