这篇文章给大家分享的是有关redis中bigkey扫描脚本的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

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

importsysimportredisdeffind_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=0temp=client.scan(cursor=i,count=1000)j=0whiletemp[0]>0:i=temp[0]j=j+len(temp[1])try:r=client.pipeline(transaction=False)forkintemp[1]:r.debug_object(k)tempA=r.execute()x=0forkeyintempA:length=key.get("serializedlength")##type=key.get("encoding")iflength>10240:type=client.type(temp[1][x])printtemp[1][x],type,lengthx=x+1except:print"aexecptioncome"temp=client.scan(cursor=i,count=1000)if__name__=='__main__':iflen(sys.argv)!=4:print'Usage:python',sys.argv[0],'hostportpassword'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=1keyspace_info=r.info("keyspace")fordbinkeyspace_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分钟跑完,完全可用。

感谢各位的阅读!关于“redis中bigkey扫描脚本的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!