2,redis 大key 分析

redis中查找大key方法汇总:
什么是大key?顾名思义就是单个key中的数据比较大,通常来说,单个key的value值不会很大,这种情况下,key的读取,删除操作不会影响性能,
如果value过大,读取或删除会相对耗时,大家都知道,redis是单线程,耗时操作就会阻塞其它请求,给性能上带来一些影响。

所谓的bigkey就是存储本身的key值空间太大,或者hash,list,set等存储中value值过多。
主要包括:
        1、单个简单的key存储的value很大
        2、hash, set,zset,list 中存储过多的元素
        3、一个集群存储了上亿的key
bigkey会带来一些问题,如:
1.读写bigkey会导致超时严重,甚至阻塞服务。
2.大key相关的删除或者自动过期时,会出现qps突降或者突升的情况,极端情况下,会造成主从复制异常,Redis服务阻塞无法响应请求。



1,自带命令redis-cli --bigkeys
该命令是redis自带,但是只能找出五种数据类型里最大的key。很明显,这并不能帮助我们去发现整个数据里的大key,所以一般不使用。

[root@centos7 bin]# ps -ef|grep redis
root      20338      1  0 21:39 ?        00:00:01 ./redis-server *:6379
root      20353  15451  0 22:00 pts/0    00:00:00 grep --color=auto redis
[root@centos7 bin]# 
[root@centos7 bin]# ./redis-cli -h 127.0.0.1 -p 6379 --bigkeys

# Scanning the entire keyspace to find biggest keys as well as
# average sizes per key type.  You can use -i 0.1 to sleep 0.1 sec
# per 100 SCAN commands (not usually needed).


-------- summary -------

Sampled 0 keys in the keyspace!
Total key length in bytes is 0 (avg len 0.00)


0 strings with 0 bytes (00.00% of keys, avg size 0.00)
0 lists with 0 items (00.00% of keys, avg size 0.00)
0 sets with 0 members (00.00% of keys, avg size 0.00)
0 hashs with 0 fields (00.00% of keys, avg size 0.00)
0 zsets with 0 members (00.00% of keys, avg size 0.00)
[root@centos7 bin]# 






2,redis 大key分析工具2 rdb_bigkeys
[root@centos7 ~]# mkdir /home/gocode/
[root@centos7 ~]# export GOPATH=/home/gocode/
[root@centos7 ~]# git clone https://github.com/weiyanwei412/rdb_bigkeys.git
[root@centos7 ~]# export GOBIN=$GOPATH/bin
[root@centos7 ~]# export PATH=$PATH:$GOBIN
[root@centos7 ~]# go env |egrep 'GOPATH|GOROOT'
GOPATH="/home/gocode/"
GOROOT="/usr/lib/golang"
[root@centos7 ~]#
[root@centos7 ~]# cd rdb_bigkeys/
[root@centos7 rdb_bigkeys]# 
[root@centos7 rdb_bigkeys]# 
[root@centos7 rdb_bigkeys]# pwd
/root/rdb_bigkeys
[root@centos7 rdb_bigkeys]# 
[root@centos7 ~]#
[root@centos7 rdb_bigkeys]# go get 
[root@centos7 rdb_bigkeys]# go build
[root@centos7 rdb_bigkeys]# ll
total 2424
-rw-r--r--. 1 root root    6467 Nov 24 23:50 comfuncs.go
-rw-r--r--. 1 root root   35147 Nov 24 23:50 LICENSE
-rw-r--r--. 1 root root    4030 Nov 24 23:50 memcallback.go
drwxr-xr-x. 3 root root      17 Nov 24 23:50 misc
-rwxr-xr-x. 1 root root 2422642 Nov 24 23:58 rdb_bigkeys
-rw-r--r--. 1 root root    2193 Nov 24 23:50 rdb_bigkeys.go
-rw-r--r--. 1 root root     960 Nov 24 23:50 README.md
[root@centos7 rdb_bigkeys]#



使用很简单,全部就下面提到的5个参数: ./rdb_bigkeys --bytes 1024 --file bigkeys_6379.csv --sep 0 --sorted --threads 4 dump6379.rdb 
上述命令分析dump6379.rdb文件中大于1024bytes的KEY, 由大到小排好序, 以CSV格式把结果输出到bigkeys_6379.csv的文件中

  

posted @ 2020-12-20 12:29  pwcc  阅读(769)  评论(0)    收藏  举报