需求:模拟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. java.io 包下的类有哪些 + 面试题

    java.io 包下的类有哪些 + 面试题 IO 介绍 IO 是 Input/Output 的缩写,它是基于流模型实现的,比如操作文件时使用输入流和输出流来写入和读取文件等. IO 分类 传统的 IO ...

  2. 云原生 - Istio可观察性之监控(四)

    作者:justmine 头条号:大数据与云原生 微信公众号:大数据与云原生 创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处. 为了方便阅读,微信公众号已按分类排版,后续的文 ...

  3. Codeforces_821

    A.直接判断每一个数. #include<bits/stdc++.h> using namespace std; ][]; int main() { ios::sync_with_stdi ...

  4. StackExchange.Redis 之 hash 类型示例

    StackExchange.Redis 的组件封装示例网上有很多,自行百度搜索即可. 这里只演示如何使用Hash类型操作数据: // 在 hash 中存入或修改一个值 并设置order_hashkey ...

  5. bootstrap 表单类

    bootstrap 表单类 表单美化 用法: 向父元素 <form role="form"></form>     添加 role="form&q ...

  6. ORACLE-SQLLOAD导入外部数据详解

    今天公司需要把外部文本的一些数据导入到数据库.这里把相关步骤和注意的地方记录,供需要的人参考学习!这里的环境是在windows下的数据库,linux或者其他数据库同理! 1.准备工作:创建需要导入数据 ...

  7. 导出Chrome浏览器中保存的密码

    title: 导出Chrome浏览器中保存的密码 date: 2018-02-11 17:54:51 tags: --- 导出Chrome浏览器中保存的密码 先知看到的,挺有意思,记录一下 不同浏览器 ...

  8. 《自拍教程14》Linux的常用命令

    Linux操作系统, 包括我们大家熟知的Android, Ubuntu, Centos, Red Hat, UOS等. 这些常用命令先大概了解下,当然能熟练掌握并运用到实际工作中那最好不过了. 后续技 ...

  9. Unable to update index for nexus-publish | http://ip:port/repository/maven-public/

    问题描述:Unable to update index for nexus-publish | http://ip:port/repository/maven-public/ 解决方案:进入工作空间. ...

  10. vux-- Vue.js 移动端 UI 组件库

    1.使用 安装或更新: npm install vux --save npm install vux-loader --save 如果没有安装less: npm install less less-l ...