redis查找bigkeys--密码带特殊字符 + 统计keys - hgetall ImpExpCancel-test

1.密码特殊字符

复制代码
[root@VM_0_111_centos redis]# cat mybigkeys.py 
#!/usr/bin/env 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:
    if length > 10240:
        bigKey = True
    if bigKey:
        print db, k, type, length
 
 
def find_big_key_normal(db_host, db_port, db_num):
    db_password = "D0p(8i!!!!"
    r = redis.StrictRedis(host=db_host, port=db_port, db=db_num,password=db_password)
    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 password '
        exit(1)
    db_host = sys.argv[1]
    db_port = sys.argv[2]
    db_password = "D0p(8i!qa!!!"
    r = redis.StrictRedis(host=db_host, port=int(db_port),password=db_password)
    nodecount = 1
    #nodecount = r.info()['nodecount']
    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", ""))
[root@VM_0_111_centos redis]# 
复制代码

2.执行

[root@VM_0_111_centos redis]# python mybigkeys.py 10.0.0.74 6379

参考:https://www.cnblogs.com/soilge/p/11641327.html

posted @   littlevigra  阅读(1346)  评论(3编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
历史上的今天:
2019-07-05 docker-compose 部署elk+解决时间不对导致kibana找不到logstash定义的index + docker-compose安装
2018-07-05 构建 CDN 分发网络架构
点击右上角即可分享
微信分享提示