需求:模拟redis-trib.rb info ip:port输出的结果

如:

[redis@lxd-vm3 ~]$ redis-trib.rb info 5.5.5.101:29001
/usr/local/ruby2.5.1/lib/ruby/gems/2.5.0/gems/redis-3.3.0/lib/redis/client.rb:459: warning: constant ::Fixnum is deprecated
5.5.5.103:29002 (a76debe0...) -> 1514 keys | 5463 slots | 1 slaves.
5.5.5.102:29001 (eb7dfeda...) -> 8196781 keys | 5457 slots | 1 slaves.
5.5.5.101:29003 (7c79008a...) -> 4497 keys | 5464 slots | 1 slaves.
[OK] 8202792 keys in 3 masters.
500.66 keys per slot on average.

通过shell脚本实现类似的:

redis-cli -h $1 -p $2 -c cluster slots | xargs -n8 |  awk '{print $3":"$4" "$2-$1+1}' > tmp_slot_num
awk '{a[$1]++}END{for(i in a)print i}' tmp_slot_num | sort -nk2 -t ":" > ip_port total_keys=0
master_num=0
for i in `cat ip_port`
do
let master_num=master_num+1
instance_slots=0
instance_keys=0
redis_ip=$(echo $i | awk -F[:] '{print $1}')
redis_port=$(echo $i | awk -F[:] '{print $2}')
instance_keys=$(redis-cli -c -h $redis_ip -p $redis_port dbsize)
let total_keys=total_keys+instance_keys
slots=($(awk '/'$i'/{print $2}' tmp_slot_num))
len=${#slots[@]}
for(( j=0;j<=len-1;j++))
do
let instance_slots=instance_slots+${slots[j]}
done
echo "$redis_ip:$redis_port->$instance_keys keys->$instance_slots slots"
done
echo "[ok] $total_keys keys in $master_num masters."
avg=$(awk 'BEGIN{printf "%.2f\n",'$total_keys'/16384}')
echo "$avg keys per slot on average."

测试结果

[redis@lxd-vm3 ~]$ sh a10.sh 5.5.5.101 29001
5.5.5.102:29001->8196781 keys->5457 slots
5.5.5.103:29002->1514 keys->5463 slots
5.5.5.101:29003->4497 keys->5464 slots
[ok] 8202792 keys in 3 masters.
500.66 keys per slot on average.
[redis@lxd-vm3 ~]$

  

通过shell模拟redis-trib.rb info的输出的更多相关文章

  1. redis集群错误解决:/usr/lib/ruby/gems/1.8/gems/redis-3.0.0/lib/redis/client.rb:79:in `call': ERR Slot 15495 is already busy (Redis::CommandError)

    错误信息: /usr/lib/ruby/gems/1.8/gems/redis-3.0.0/lib/redis/client.rb:79:in `call': ERR Slot 15495 is al ...

  2. adb shell模拟点击事件(input tap)

    前言:appium定位也不是万能的,有些元素还是定位不到,这个时候只能换一个方式定位了,可以使用这个adb shell模拟点击. 1.input可以实现的功能 输入文本信息:input text gu ...

  3. redis 模拟redis server接收信息

    一.实现说明 客户端使用jedis正常set值到redis服务器   2. 模拟服务器接收jedis发送的信息 二.jedis客户端代码 package com.ahd.redis; import r ...

  4. 模拟实现JSON.stringiry 的格式化输出

    前言 这是一道笔试题,要求模拟实现JSON.stringiry 的格式化输出,按照层级缩进,输出易读格式,即完成以下方法 JSON.stringify(jsObj, null, 4); // 缩进4个 ...

  5. 强大的shell(一键redis,mysql,php,openresty,jdk)

    前序 集成了一键安装离线包redis,mysql,php,openresty,jdk,系统优化等脚本, 一个shell搞掂. JDK:自动识别本地安装包,自动解压,部署,配置环境变量. REDIS:自 ...

  6. PostgreSQL异步客户端(并模拟redis 数据结构)

    以前为了不在游戏逻辑(对象属性)变更时修改数据库,就弄了个varchar字段来表示json,由服务器逻辑(读取到内存)去操作它. 但这对运维相当不友好,也不能做一些此Json数据里查询. 所以后面就用 ...

  7. shell、redis使用

    一.跳板机 来源:什么是跳板机 SSH[Secure Shell](远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听客户端的连接,ssh服务端的进程名为sshd,负责实时监 ...

  8. 使用adb shell 模拟点击事件

    针对问题[appium无法点击到某一内容,需要使用adb去执行点击事件] 需要命令: adb shell adb devices input [input可以实现的功能]: 输入文本信息:input ...

  9. shell模拟“多线程”

      shell中并没有真正意义上的多线程,要实现"多线程"可以启动多个子进程,并将子进程放入后台执行来模拟多线程,最大程度利用CPU性能. 循环中执行并行代码 #!/bin/bas ...

随机推荐

  1. OGG主从表结构不同步,出现OGG-01296错误

    一.Cause ogg的err日志出现以下报错 2019-09-10 16:36:55 WARNING OGG-01003 Oracle GoldenGate Delivery for Oracle, ...

  2. 【Nginx入门系列】第四章 通过域名匹配虚拟主机,不修改端口

    域名访问原理 我们在显示生活中,我们怎样通过一个域名来访问到我们所需要的网站呢? 例如www.baidu.com,我们在浏览器输入百度网址会先发送请求到DNS服务器,DNS会通过我们的域名解析百度对应 ...

  3. 微信小程序如何创建云函数并安装wx-server-sdk依赖

    时间:2020/01/23 步骤 1.在微信开发者工具中云函数所在的文件夹的图标与其他文件夹是不同的,如下(第一个是云函数): 如果需要使一个普通文件变为云函数文件夹,需要在project.confi ...

  4. CRC循环冗余检测C语言实现----花了几天时间乱写的

    由于笔者目前正在上计算机网络的课,老师要我们编一下crc的循环检测过程,所以我想着刚好在学c,那就随便看看写不写的了,首先百度了一下网上资料,基本都是用位移运算符实现的,由于本人懒得去看一下位移运算, ...

  5. Java中的8种基本数据类型

    JAVA中的8种基本数据类型:byte short int long float double char boolean 特别说明: 1)char类型占2个字节,可以表示汉字.汉字和英文字符都占2个字 ...

  6. MBMD(MobileNet-based tracking by detection algorithm)作者答疑

    If you fail to install and run this tracker, please email me (zhangyunhua@mail.dlut.edu.cn) Introduc ...

  7. C++中类成员变量在初始化列表中的初始化顺序

    引子:我们知道,C++中类成员变量的初始化顺序与其在类中的声明顺序是有关的. 先看代码: class TestClass1 { public: TestClass1() { cout << ...

  8. 获取页面form表单对象的方式

    w3c并没有提供标准的这种使用方式,所以各浏览器实现会有差异,还是使用标准的w3c标准,getElement的方式. 记录下,老是忘记 使用documen对象的方法 getElementxxx 方式, ...

  9. 以stm32f407为例,学习cortex-m4通用寄存器的用法

    测试代码如下: int add(int a, int b, int c, int d, int e, int f) { return a+b+c+d+e+f; } int main(void) { i ...

  10. php 安装 pdo_mysql

    首先要安装 mysql客户端 然后再安装php mysql 扩展 1.安装 mysql客户端 和 mysql开发包 使用yum安装mysql client 到mysql官网下载 yum文件  http ...