redis大key搜索

2021/6/29 2:21:55

本文主要是介绍redis大key搜索,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

阿里云 redis大key搜索工具 https://yq.aliyun.com/articles/117042?spm=a2c4e.11153940.blogcont531067.15.fdaf45b5YA9Dvl 1、下载redis python客户端 ``` wget "https://pypi.python.org/packages/68/44/5efe9e98ad83ef5b742ce62a15bea609ed5a0d1caf35b79257ddb324031a/redis-2.10.5.tar.gz#md5=3b26c2b9703b4b56b30a1ad508e31083” tar -xvf redis-2.10.5.tar.gz cd redis-2.10.5 sudo python setup.py install ``` 2、copy脚本 find_bigkey.py ``` import sys import redis def check_big_key(db,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_password, db_num): r = redis.StrictRedis(host=db_host, port=db_port, password=db_password, db=db_num) for k in r.scan_iter(count=1000): check_big_key(db_num,r, k) def find_big_key_sharding(db_host, db_port, db_password, db_num, nodecount): r = redis.StrictRedis(host=db_host, port=db_port, password=db_password, 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(db_num,r, k) cursor = iscan[0] print cursor, db, node, len(iscan[1]) if cursor == "0": break; 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) print 'begin scanning big key in redis:', db_host,':',db_port nodecount = 1 if 'nodecount' in r.info(): nodecount = r.inf()['nodecount'] keyspace_info = r.info("keyspace") for db in keyspace_info: print 'start check ', db, ' ', keyspace_info[db] if nodecount > 1: find_big_key_sharding(db_host, db_port, db_password, db.replace("db",""), nodecount) else: find_big_key_normal(db_host, db_port, db_password, db.replace("db", "")) else: print 'start check ', 'db', ' ', 0 find_big_key_normal(db_host, db_port, db_password, 0) ``` 3、执行脚本 ``` 如: python find_bigkey.py 127.0.0.1 6375 123456 ``` 4、redis一般命令 ``` ./redis-cli -h 10.4.7.203 -p 6379 -a 111111 查询key :keys * 执行清理前查看(若不需要清理全部则清理指定key即可) >keys * //查看所有key值 清理redis >del key //删除指定key >Flushdb //删除当前数据库中的所有Key >flushall //删除所有数据库中的key ```

这篇关于redis大key搜索的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程