Skip to content

Instantly share code, notes, and snippets.

@stnet253
Last active February 5, 2020 08:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stnet253/9c298199cd395b91a96d7da6be1cccca to your computer and use it in GitHub Desktop.
Save stnet253/9c298199cd395b91a96d7da6be1cccca to your computer and use it in GitHub Desktop.
掃描reids instance中大於10240的key打印出來
#!/usr/bin/python
import sys
import redis
def check_big_key(r, k):
bigKey = False
length = 0
try:
type = r.type(k)
if type == "string":
length = r.strlen(k)
elif type == "hash":
length = r.hlen(k)
elif type == "list":
length = r.llen(k)
elif type == "set":
length = r.scard(k)
elif type == "zset":
length = r.zcard(k)
except:
return
if length > 10240:
bigKey = True
if bigKey :
print db,k,type,length
def find_big_key_normal(db_host, db_port, db_num):
r = redis.StrictRedis(host=db_host, port=db_port, db=db_num)
for k in r.scan_iter(count=1000):
check_big_key(r, k)
def find_big_key_sharding(db_host, db_port, db_num, nodecount):
r = redis.StrictRedis(host=db_host, port=db_port, db=db_num)
cursor = 0
for node in range(0, nodecount) :
while True:
iscan = r.execute_command("iscan",str(node), str(cursor), "count", "1000")
for k in iscan[1]:
check_big_key(r, k)
cursor = iscan[0]
print cursor, db, node, len(iscan[1])
if cursor == "0":
break;
if __name__ == '__main__':
if len(sys.argv) != 3:
print 'Usage: python ', sys.argv[0], ' host port '
exit(1)
db_host = sys.argv[1]
db_port = sys.argv[2]
r = redis.StrictRedis(host=db_host, port=int(db_port))
#nodecount = r.info()['nodecount']
nodecount = 1
keyspace_info = r.info("keyspace")
for db in keyspace_info:
print 'check ', db, ' ', keyspace_info[db]
if nodecount > 1:
find_big_key_sharding(db_host, db_port, db.replace("db",""), nodecount)
else:
find_big_key_normal(db_host, db_port, db.replace("db", ""))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment