Redis获得bigkey扫描脚本
具体可见:https://yq.aliyun.com/articles/117042?t=t1
我对这个脚本进行了一个压力测试,在redis的内存为15G,key的数量为2KW,ops为40K到80K之间,在这种情况下,阿里云的脚本完全不能跑成功(估计跑出来的时间以天为单位),主要原因是每确认一个key的情况,就需要与redis交互多次。因此,我对它的脚本进行了改造,加入了pipeline和debug object方法,脚本如下:
import redis
def 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", ""))
import sys
import redis
client = redis.StrictRedis(host=db_host,port=db_port,password=db_password,db=db_num)
i = 0
temp = client.scan(cursor=i,count=2)
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")
if length > 1:
type = client.type(temp[1][x])
print(temp[1][x],type,length)
x = x + 1
except:
print("a exception come")
temp = client.scan(cursor=i,count=2)
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")
if length > 1:
type = client.type(temp[1][x])
print(temp[1][x],type,length)
x = x + 1
except:
print("a exception come")
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]
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获得bigkey扫描脚本的更多相关文章
- redis的bigkey扫描脚本
众所周知,redis里面的大key存在是非常危险的一件事情.因为最近的工作转移到中间件相关的工作,因此关注了一下bigkey的扫描方法.首先介绍一下阿里云提供的扫描脚本: 具体可见:https://y ...
- 如何快速排查发现redis的bigkey?4种方案一次性给到你!
本篇文章将以redis的bigkey为主题进行技术展开,通过从认识redis的高性能,bigkey的危害.存在原因.4种解决方案,到模拟实战演练的介绍方式,来跟大家一起认识.探讨和学习redis. 先 ...
- redis中使用java脚本实现分布式锁
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/115.html?1455860390 edis被大量用在分布式的环境中,自 ...
- 小白读iOS冗余资源扫描脚本
随着公司项目的不断功能迭代,项目的体积越来越大,各种瘦身策略迫在眉睫.由于平时使用Linux高级命令和 shell脚本的机会不多,之前学的知识一下子想起来很难.所有趁着这次看脚本,重新温习一下. 本文 ...
- iOS项目冗余资源扫描脚本
iOS项目冗余资源扫描脚本 随着iOS项目的版本不断迭代,app中冗余文件会越来越多,app size也持续增加,是时候需要对app冗余资源进行检测,对app进行瘦身. 使用方法: 1. 运行环境为m ...
- Redis进阶实践之十九 Redis如何使用lua脚本
一.引言 redis学了一段时间了,基本的东西都没问题了.从今天开始讲写一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运行在任何平台上,也可以嵌入 ...
- 获取redis主从复制链SHELL脚本
获取redis主从复制链SHELL脚本 vi redisnode.sh #!/bin/sh master_host=$ master_port=$ auth=$ #判断输入密码是否为空,为空则转化为' ...
- Python 网站后台扫描脚本
Python 网站后台扫描脚本 #!/usr/bin/python #coding=utf-8 import sys import urllib import time url = "ht ...
- redis伪集群脚本
#安装redis伪集群脚本,先把redis-..gem及启动脚本放在/data1/redis-cluster目录下,然后执行该脚本即可 #!/bin/bash set -e #获取redis本机ip ...
随机推荐
- Spring Cloud Eureka(六):Eureka Client 如何注册到Eureka Server
1.本节概要 根据前文我们对Eureka Server 有了一定的了解,本节我们主要学习Eureka Client 与 Eureka Server 如何通讯的及相关通信机制是什么,本文会弄清楚一下几个 ...
- csp-s模拟110
倒计时三天. 这场又是巨头们的AK场,大众分200+,貌似真实的csps? 然而T1又炸了,$1<<62$暴int,要$1ll<<62$.T2试图打70部分分,T3也只会40分 ...
- 【spring源码分析】IOC容器初始化——查漏补缺(三)
前言:本文分析InitializingBean和init-method方法,其实该知识点在AbstractAutowireCapableBeanFactory#initializeBean方法中有所提 ...
- mongoose 实现 增、删、改、查
mongoose常用的API 增 save是一个实例方法,使用时需要先 new Model() 来实例化 //保存一个用户信息,userobj为你创建的文档对象模型里的字段,需正确对应传入 const ...
- 设置django 时间
使用Django的DateTimeField(auro_now_add=True)设置当前时间为创建时间时,时间往往与当前时间对应不上,这是由于Django默认使用的是[UTC](世界标准时间)时区, ...
- UML期末复习题
看了网上的各种UML图的相关资料,找到的都是差不多一样的对图的基本介绍.之前复习的时候也想对不同UML图单独进行复习总结,后来发现这样复习好像没什么用,不能理解每个图之间的关系,所以就没有进一步总结. ...
- SQL-W3School-基础:SQL AND & OR 运算符
ylbtech-SQL-W3School-基础:SQL AND & OR 运算符 1.返回顶部 1. AND 和 OR 运算符用于基于一个以上的条件对记录进行过滤. AND 和 OR 运算符 ...
- [ML] Linear Discriminant Analysis
虽然名字里有discriminat这个字,但却是生成模型,有点意思. 判别式 pk 生成式 阅读:生成方法 vs 判别方法 + 生成模型 vs 判别模型 举例: 判别式模型举例:要确定一个羊是山羊还是 ...
- 比特币nBits计算
转载:比特币源码分析(二十二) - 挖矿和共识 https://blog.csdn.net/yzpbright/article/details/81231351 CalculateNextWorkRe ...
- 比特币区块的hash算法
Block hashing algorithm Bitcoin mining uses the hashcash proof of work function; the hashcash algori ...