• 找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
    
    • 1
    • 2

    将go添加到环境变量

    export GO111MODULE=on
    export GOROOT=/usr/local/go
    export GOPATH=/home/gopath
    export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
    
    • 1
    • 2
    • 3
    • 4

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

    source /etc/profile
    
    • 1

    初始化go
    go mod init 【module名】

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

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

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

    编译

    go get
    go build
    
    • 1
    • 2

    在这里插入图片描述
    编译出了可执行文件
    在这里插入图片描述

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

    在这里插入图片描述

    在这里插入图片描述

    每列分别为数据库编号,key类型,key名,key大小,元素数量,最大值元素名,元素大小,key过期时间。
    在这里插入图片描述

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

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

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

    fork到自己仓库注释掉下面四行
    在这里插入图片描述

    更改rdb_bigkeys下的rdb_bigkeys.go文件
    在这里插入图片描述
    重新进行build

    rm -rf go.sum
    rm -rf go.mod
    go clean -modcache
    go mod init rdb_bigkeys
    go mod tidy
    go build
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

  • 相关阅读:
    解析Java中1000个常用类:Calendar类,你学会了吗?
    创建型模式-建造者模式
    M1 pro 芯片Macbook Pro配置anaconda&& GPU版Pytorch
    【嵌入式UI框架:LVGL】使用恩智浦GUI设计工具,像Qt一样开发MCU界面
    Unity三种物体溶解方法
    python数据结构与算法-03_链表
    【深度学习】torch.nn.Sequential方法介绍
    Python爬虫--xpath
    Flink CDC 新一代数据集成框架
    【自学CSS笔记第9篇】——结构伪类选择器和伪元素
  • 原文地址:https://blog.csdn.net/qq_46548855/article/details/132637891