go- rdb-bigkeys安装与故障解决

一、安装

git clone https://github.com/weiyanwei412/rdb_bigkeys.git
cd rdb_bigkeys
go mod init rdb_bigkeys
go mod tidy
go build
# 运行解析
 ./rdb_bigkeys --bytes 1024 --file bigkeys_6379.csv --sep 0 --sorted --threads 2 dump.rdb

二、故障原因

1.运行报错

panic: rdb: invalid RDB version number 9

2.报错原因

报错原因主要是因为代码对rdb解析的时候获取版本的处理有问题
我们看下代码

# 619-636func (d *decode) checkHeader() error {
	header := make([]byte, 9)
	_, err := io.ReadFull(d.r, header)
	if err != nil {
		return err
	}

	if !bytes.Equal(header[:5], []byte("REDIS")) {
		return fmt.Errorf("rdb: invalid file format")
	}
//可以看到这里面取的是header[5:],而我们cat一个dump.rdb,可以发现其内部数据是这样REDIS0009�	redis-ver6.0.10�,所以这里真实的版本是6,但是取的版本号是9,所以会有这个报错
	version, _ := strconv.ParseInt(string(header[5:]), 10, 64)
	if version < 1 || version > 7 {
		return fmt.Errorf("rdb: invalid RDB version number %d", version)
	}

	return nil
}

三、解决报错

方式一:

1.fork项目

将github.com/cupcake/rdb的项目fork到自己的github账户下,只需要在github上对应项目界面点击fork按钮集合
在这里插入图片描述

2.更改自己的rdb项目的decoder.go文件

注释632-635行,然后提交变更,这里我感觉这里的version校验没有任何意义,且我的go还不太熟悉,所以这里接直接注释了,如果你有更好的办法也可以自己改

	//version, _ := strconv.ParseInt(string(header[5:]), 10, 64)
	//if version < 1 || version > 7 {
	//	return fmt.Errorf("rdb: invalid RDB version number %d", version)
	//}

3.更改rdb_bigkeys下的rdb_bigkeys.go文件

//这里把github.com/cupcake/rdb变成了github.com/database-on-line/rdb。你可以用自己账号下的rdb,用我这个也可以
package main

import (
	"bufio"
	"flag"
	"fmt"
	"os"
	"strings"
	"sync"

	"github.com/database-on-line/rdb"
)

4.重新build一遍

rm go.sum
rm go.mod
go clean -modcache
go mod init rdb_bigkeys
go mod tidy
go build

方式二:

1.修改已经下载好的moudle文件

# 一般的module路径
cd $GOPATH/pkg/mod/
# 如果使用yum等安装的,一般是在下面的路径
cd ~/go/pkg/mod/
# 修改decoder.go文件,如方式一中的步骤二一样

2.删除变异文件重新build

# 进入到项目目录
cd rdb_bigkeys
# 删除已经编译好的文件
rm rdb_bigkeys
# 重新build
go build

这样下来就可以正常的运行了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值