通过shell模拟redis-trib.rb info的输出
需求:模拟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的输出的更多相关文章
- 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 ...
- adb shell模拟点击事件(input tap)
前言:appium定位也不是万能的,有些元素还是定位不到,这个时候只能换一个方式定位了,可以使用这个adb shell模拟点击. 1.input可以实现的功能 输入文本信息:input text gu ...
- redis 模拟redis server接收信息
一.实现说明 客户端使用jedis正常set值到redis服务器 2. 模拟服务器接收jedis发送的信息 二.jedis客户端代码 package com.ahd.redis; import r ...
- 模拟实现JSON.stringiry 的格式化输出
前言 这是一道笔试题,要求模拟实现JSON.stringiry 的格式化输出,按照层级缩进,输出易读格式,即完成以下方法 JSON.stringify(jsObj, null, 4); // 缩进4个 ...
- 强大的shell(一键redis,mysql,php,openresty,jdk)
前序 集成了一键安装离线包redis,mysql,php,openresty,jdk,系统优化等脚本, 一个shell搞掂. JDK:自动识别本地安装包,自动解压,部署,配置环境变量. REDIS:自 ...
- PostgreSQL异步客户端(并模拟redis 数据结构)
以前为了不在游戏逻辑(对象属性)变更时修改数据库,就弄了个varchar字段来表示json,由服务器逻辑(读取到内存)去操作它. 但这对运维相当不友好,也不能做一些此Json数据里查询. 所以后面就用 ...
- shell、redis使用
一.跳板机 来源:什么是跳板机 SSH[Secure Shell](远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听客户端的连接,ssh服务端的进程名为sshd,负责实时监 ...
- 使用adb shell 模拟点击事件
针对问题[appium无法点击到某一内容,需要使用adb去执行点击事件] 需要命令: adb shell adb devices input [input可以实现的功能]: 输入文本信息:input ...
- shell模拟“多线程”
shell中并没有真正意义上的多线程,要实现"多线程"可以启动多个子进程,并将子进程放入后台执行来模拟多线程,最大程度利用CPU性能. 循环中执行并行代码 #!/bin/bas ...
随机推荐
- Spring Boot 2.x基础教程:默认数据源Hikari的配置详解
通过上一节的学习,我们已经学会如何应用Spring中的JdbcTemplate来完成对MySQL的数据库读写操作.接下来通过本篇文章,重点说说在访问数据库过程中的一个重要概念:数据源(Data Sou ...
- nginx 源码编译 用OPENSSL源码 开启 SSL
./configure --prefix=/usr/local/nginx --with-openssl=/home/uniqs/thirdparty/openssl/openssl-1.1.1d - ...
- Head First设计模式分析学习
永不放弃的毅力,和对欲望的控制. 注意:要能够理解相类似的设计模式之间的区别和不同.可以把类比列举出来,加深记忆. 是否加入Spring容器中的标准是是否要用到Spring框架的方法或者功能特性,如事 ...
- ELK:收集Docker容器日志
简介 之前写过一篇博客 ELK:日志收集分析平台,介绍了在Centos7系统上部署配置使用ELK的方法,随着容器化时代的到来,容器化部署成为一种很方便的部署方式,收集容器日志也成为刚需.本篇文档从 容 ...
- 使用logstash结合logback收集微服务日志
因为公司开发环境没有装elk,所以每次查看各个微服务的日志只能使用如下命令 这样子访问日志是并不方便,于是想为每个微服务的日志都用logstash收集到一个文件out中,那以后只要输出这个文件则可查看 ...
- 通俗易懂的ref和out区别
ref 和 out 是C#开发中经常用到的两个关键字,但是很多人没有搞清楚这两个关键字的具体区别,下面我们来说一下这两个关键的区别. 零. ref 与 out 的异同 相同: 都是按地址传递: 使用后 ...
- 【CMake】CMake ERROR:could not find git for clone of
在使用 CMake 构建VS2015项目时遇到一个错误提示:could not find git for clone of. 因为项目需要从GitHub导入运行库,但构建项目时提示未能找到这个库,而g ...
- Linux访问权限控制及时间同步实践
1.编写脚本/root/bin/checkip.sh,每5分钟检查一次,如果发现通过ssh登录失败 次数超过10次,自动将此远程IP放入Tcp Wrapper的黑名单中予以禁止防问 方式一:脚本+定时 ...
- Python3(四) 分支、循环、条件与枚举
表达式 表达式(Expression)是运算符(operator)和操作数(operand)所构成的序列 >>> 1 + 1 2 >>> a = [1 ...
- 杭电------2048神上帝以及老天爷(C语言写)
#include<stdio.h> ] = { -,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,- }; ] = { }; long long jiec ...