首页 > 数据库 >Redis查询大key

Redis查询大key

时间:2023-03-16 09:45:57浏览次数:50  
标签:Redis db 查询 host key password type port

原文

安装

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

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_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(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(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)
  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_password, db.replace("db",""), nodecount)
    else:
      find_big_key_normal(db_host, db_port, db_password, db.replace("db", ""))

参考以下命令,查找较大的Key。

python find_bigkey [$DB_Host] [$DB_Port] [$DB_Pass]

说明

  • [$DB_Host]:Redis数据库的主机名或IP地址。
  • [$DB_Port]:Redis数据库的端口号,默认为“6379”。
  • [$DB_Pass]:Redis数据库的密码。
  • 该命令支持查找Redis主从版本和Redis集群版本中的大Key。此处的大Key阈值为“10240”,比如:String类型的Value大于10240的是大Key,List长度大于10240认为是大Key,Hash Field的数目大于10240认为是大Key。
  • 该脚本默认每次搜索1000个Key,对业务的影响比较低,不过最好在业务低峰期进行操作,避免scan命令对业务造成影响。

标签:Redis,db,查询,host,key,password,type,port
From: https://www.cnblogs.com/HappyTeemo/p/17221164.html

相关文章

  • CMU 15-445 数据库系统 Homework SQL查询
    cmu15-445是一门关于数据库的课程,看到该课程的homeworks和project就觉得十分有挑战性。本文是对该课程的Homework1,SQL语句的十道题,做完以后可以对SQL查询有个好的了解。......
  • #认识Redis
    Redis(全称:RemoteDictionaryServer远程字典服务)是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它是......
  • MP带条件分页查询
    配置文件@ConfigurationpublicclassMybatisPlusConfig{//分页拦截器,提供逻辑分页,查第几页就是第几页//mybaits是内存分页,将所有数据都查出来再分页@B......
  • Redis基础知识
    IO多路复用IO:I/O是Input输入/Output输出的简称,通常指数据在内部存储器(内存)和外部存储器(硬盘、优盘)或其他周边设备之间的输入和输出。  输入/输出是信息处理系统(计算机)......
  • 狂神--Redis-Docker启动脚本
    1.docker版本20dockerinfoClient:Context:defaultDebugMode:falsePlugins:app:DockerApp(DockerInc.,v0.9.1-beta3)buildx:BuildwithBuil......
  • 初级 - redis 安装
    1、redis概述redis官网地址:https://redis.io/redisgithub地址:https://github.com/redis/redis/tree/6.22、redis安装2.1redisdocker-compose安装1、先去gith......
  • docker redis常用命令
    一、dockerredis服务部署1.下载官方redis镜像dockerpullredis2.运行镜像,返回容器id。此时redis服务已经开启dockerrun-d-p6379:6379redis3.进入容器(客户端......
  • Mac安装Redis
    Mac安装Redis1、首先,检查是否已经安装Homebrew,如果没有安装Homebrew,请先安装,我这里推荐安装国内的Homebrew会快一些,打开Mac终端输入国内npm即可安装,命令由于太敏感,可以......
  • keymaster4.0 VTS测试用例
    VTS单模块测试:./VtsHalKeymasterV4_0TargetTest--gtest_filter=PerInstance/HmacKeySharingTest*/0_default./VtsHalKeymasterV4_0TargetTest--gtest_filter=PerInsta......
  • docker 启动redis
    1、拉取最新镜像dockerpullredis2、启动redisdockerrun-d-v/data/redis:/data--nameredis-p6379:6379redisredis-server--requirepass"xx.com"--appe......