找redis大key工具rdb_bigkeys

github官网
https://github.com/weiyanwei412/rdb_bigkeys
在centos下安装go

[root@hadoop102 rdb_bigkeys-master]# wget https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz
[root@hadoop102 rdb_bigkeys-master]# tar -zxf go1.13.5.linux-amd64.tar.gz -C /usr/local

将go添加到环境变量

export GO111MODULE=on
export GOROOT=/usr/local/go
export GOPATH=/home/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

保存退出后使用环境变量生效

source /etc/profile

初始化go
go mod init 【module名】

[root@hadoop102 redis_bigkey]# go mod init rdb_bigkeys-master

换一个中国的proxy,不然go get会报错

go env -w GOPROXY=https://goproxy.cn

编译

go get
go build

在这里插入图片描述
编译出了可执行文件
找redis大key工具rdb_bigkeys_第1张图片

[root@hadoop102 rdb_bigkeys]# ./rdb_bigkeys --bytes 1024 --file bigkeys.csv --sep 0 --sorted --threads 4 dump.rdb

找redis大key工具rdb_bigkeys_第2张图片

找redis大key工具rdb_bigkeys_第3张图片

每列分别为数据库编号,key类型,key名,key大小,元素数量,最大值元素名,元素大小,key过期时间。
找redis大key工具rdb_bigkeys_第4张图片

rdb-bigkeys 在高版本的 rdb文件不能使用,我的redis 6 报错不能分析
panic: rdb: invalid RDB version number 9

报错原因
报错原因主要是因为代码对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按钮集合
找redis大key工具rdb_bigkeys_第5张图片

更改自己的rdb项目的decoder.go文件
注释630-634行,然后提交变更,这里我感觉这里的version校验没有任何意义,所以这里接直接注释了,如果你有更好的办法也可以自己改

fork到自己仓库注释掉下面四行
找redis大key工具rdb_bigkeys_第6张图片

更改rdb_bigkeys下的rdb_bigkeys.go文件
找redis大key工具rdb_bigkeys_第7张图片
重新进行build

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

找redis大key工具rdb_bigkeys_第8张图片

你可能感兴趣的:(Mysql,Mongodb,Redis,Jdbc,redis,数据库,缓存)