博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis的bigkey扫描脚本
阅读量:6909 次
发布时间:2019-06-27

本文共 1682 字,大约阅读时间需要 5 分钟。

    众所周知,redis里面的大key存在是非常危险的一件事情。因为最近的工作转移到中间件相关的工作,因此关注了一下bigkey的扫描方法。首先介绍一下阿里云提供的扫描脚本:

具体可见:https://yq.aliyun.com/articles/117042?t=t1

    我对这个脚本进行了一个压力测试,在redis的内存为15G,key的数量为2KW,ops为40K到80K之间,在这种情况下,阿里云的脚本完全不能跑成功(估计跑出来的时间以天为单位),主要原因是每确认一个key的情况,就需要与redis交互多次。因此,我对它的脚本进行了改造,加入了pipeline和debug object方法,脚本如下:

import sysimport redisdef find_big_key_normal(db_host, db_port, db_password, db_num):  client = redis.StrictRedis(host=db_host, port=db_port, password=db_password, db=db_num)  i=0  temp = client.scan(cursor=i,count=1000)  j =0  while temp[0]>0 :    i=temp[0]    j=j+len(temp[1])    try:      r = client.pipeline(transaction=False)      for k in temp[1]:        r.debug_object(k)      tempA = r.execute()      x = 0      for key in tempA:        length = key.get("serializedlength")        ##type = key.get("encoding")        if length > 10240 :          type = client.type(temp[1][x])          print temp[1][x], type,length        x=x+1    except :      print "a execption come"    temp = client.scan(cursor=i,count=1000)  if __name__ == '__main__':  if len(sys.argv) != 4:     print 'Usage: python ', sys.argv[0], ' host port password '     exit(1)  db_host = sys.argv[1]  db_port = sys.argv[2]  db_password = sys.argv[3]  r = redis.StrictRedis(host=db_host, port=int(db_port), password=db_password)  nodecount = 1  keyspace_info = r.info("keyspace")  for db in keyspace_info:    print 'check ', db, ' ', keyspace_info[db]    find_big_key_normal(db_host, db_port, db_password, db.replace("db", ""))

我对上面的脚本同样进行了一个压力测试,在redis的内存为15G,key的数量为2KW,ops为40K到80K之间,在这种情况下:

脚本10分钟跑完,完全可用。

    说明:阿里云的脚本是支持cluster的,我这个脚本是只支持单机的,大家有兴趣的可以自己去更改。

转载于:https://www.cnblogs.com/mantu/p/9249683.html

你可能感兴趣的文章
myeclipse maven项目部署tomcat爆炸404
查看>>
jquery二维码生成插件_二维码生成器
查看>>
常量表达式 & constexpr
查看>>
求奇偶数
查看>>
python__系统 : 异步实现以及GIL
查看>>
用谷歌浏览器来当手机模拟器
查看>>
混合背包问题
查看>>
程序员如何应对北上广高房价示例解说-建造者模式
查看>>
jQuery
查看>>
结队项目-性能分析-解决四则运算题目
查看>>
怎么把提交按扭改为用图片来代替
查看>>
不偏移的天地图地图服务-SuperMap版
查看>>
Three.js 关于照相机,视角的理解
查看>>
开始学习了
查看>>
centos6.4下安装php的imagick和imagemagick扩展教程
查看>>
mysql
查看>>
封装cookie localStorage sessionStorage
查看>>
struts系列:返回json格式的响应
查看>>
Eular筛法
查看>>
关于串口通信的学习记录
查看>>