Go学习——如何实现Redis数据备份及恢复?

0、前言

博主是把这里当作一种思路的开拓点,所以行文言语是倾向于大白话的,俺觉得这样不容易压抑自己的天性,但是!但是!但是!大伙们写正式文档可不能这么玩,一定按照标准的行文要求

1、背景

先跟大伙儿唠唠为啥要做这个Redis数据备份功能。博主是在HW云上买了个云服务器实例,自个在这个服务器上搭建网站,做自己的软件部署测试之类的。起初呢,部署用的是MySQL数据库,后来用着用着,软件莫名奇妙就跑死了,后来发现服务器内存爆了,毕竟咱就只是用的2G内存,结果一检查发现MySQl就占用了700MB,我一看,好家伙,真就是蝎子尾后针呗!

这谁受得了啊,不行,我得弄Ta!后来琢磨着关系型数据库估计都是这个样子,挣扎啥啊,那考虑到我目前的情况:数据量很少、数据并不是很重要、无所谓丢失不丢失、内存必须很小,这自然而然就瞄上了Redis了,这个小东西刚好满足咱的需求啊,直接上手!

本来用着用着挺好的,结果前两天HW云服务器实例到期了,我又重新搞了个AL云服务器实例,这就涉及到数据迁移了,然后就麻爪了,Redis的数据咋迁移呢?

2、概况

目前能实现的方式:

A:使用SAVE命令或者BGSAVE命令,不好使,没起作用!后来俺稍微去找了下原因,估计是因为Redis实现数据快照必须要先在配置文件进行历史开关设置,这样的话,每次存储数据就会在Redis中记录下来,方便后续使用,可当前的数据没进行存储啊,那不能扔掉啊,所以这个方案否了。

B:使用工具redis-dump,不好使,准确的说,安装没成功!我就没见过依赖这么多的工具,从第三方的依赖包,到系统的依赖包,以及系统依赖包的升级,忒麻烦麻烦麻烦了!Out!有兴趣用这种方式或者已经使用这种方式的小伙伴们,可以留言告知下这个对应的版本号、依赖对应的版本号以及操作系统的版本号,不胜感激!

目前为止,俺这两方式都没成功,索性,我也不找了,爱咋咋滴吧,我自个写一个都比这快多了。

3、实现思路

Step1:创建两个长链接,分别连接源Redis和目标Redis(此处必须指定是哪个源库到哪个目标库);

Step2:遍历源Redis指定库的所有表,就是外面那个大Key,判断其类型,主要有以下几种:hash、list、string、set和zset,别的类型俺就不知道了,见着再说;

Step3:根据不同的类型,把所有的数据读出来,然后插入到目标Redis中;

4、代码实现

这里作为一个软件程序,内容太多了,咱就给它扔到这儿了,都是免费开源的,有兴趣的小伙伴们自行获取:

https://gitee.com/onlyryan/redis-dump-go

5、实战应用

下载后,修改配置文件,每个值都必须正确:

如果是源码,直接运行main函数;

如果是发行版,要是在windows运行,直接运行exe文件;要是再Linux操作系统运行,先下载源码再编辑出二进制即可运行(发行版没放linux的,主要还是感觉windows够用了);

6、改进点

行文至此,其实算是解决了这个问题了,但还是有个小问题:

如果这两台服务器它们网络不通怎么办?

改进思路就是,在Step3的时候,将数据转换成json标准结构体存储在文件中,再将文件转移到目标redis上,读取文件,将数据还原!

7、未完待续

为啥没做这个改进点呢,其实还是考虑现实需求。

啥时候会网络不通或者说必须进行跨网域迁移数据,只有在局域网或者特别重要的网段才会出现此情况,先前说过了

特别重要的数据不要存储在redis!

特别重要的数据不要存储在redis!

特别重要的数据不要存储在redis!

  • 28
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值