通过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 ...
随机推荐
- nginx的四个主要组成部分
1.nginx二进制可执行文件 · 由各模块源码编译出的一个文件 2.nginx.conf配置文件 · 控制nginx的行为 3.access.log访问日志 . 记录每一条http请求信息 4.er ...
- nginx 源码编译 用OPENSSL源码 开启 SSL
./configure --prefix=/usr/local/nginx --with-openssl=/home/uniqs/thirdparty/openssl/openssl-1.1.1d - ...
- Affinity Propagation Demo1学习
利用AP算法进行聚类: 首先导入需要的包: from sklearn.cluster import AffinityPropagation from sklearn import metrics fr ...
- CCF_ 201512-3_画图
直接模拟就行了,注意坐标系方向与平常数组不一样,填充操作用深搜和广搜都可以,这里用了广搜. #include<iostream> #include<cstdio> #inclu ...
- docker device or resource busy
docker-compose -f docker-compose.yml up -d 时候报错 device or resource busy 使用 docker-compose down 会导致一 ...
- k8s系列---stateful(有状态应用副本集)控制器
http://blog.itpub.net/28916011/viewspace-2215046/ 在应用程序中,可以分为有状态应用和无状态应用. 无状态的应用更关注于群体,任何一个成员都可以被取代. ...
- zabbix-agentd配置文件详解
agent 端配置文件路径 :/etc/zabbix/zabbix_agentd.conf PidFile=/var/run/zabbix/zabbix_agentd.pid #<===指定pi ...
- PYTHON 学习笔记4 模块的使用、基本IO 写入读取、JSON序列化
前言 若在之前写代码的方式中,从Python 解释器进入.退出后再次进入,其定义的变量.函数等都会丢失.为了解决这个为,我们需要将需要的函数.以及定义的变量等都写入一个文件当中.这个文件就叫做脚本 随 ...
- 《Java 8 in Action》Chapter 12:新的日期和时间API
在Java 1.0中,对日期和时间的支持只能依赖java.util.Date类.同时这个类还有两个很大的缺点:年份的起始选择是1900年,月份的起始从0开始. 在Java 1.1中,Date类中的很多 ...
- Java数据结构--单链表
#java学习经验总结------单链表的建立与结点的增删 在该链表结点有data数据,并且还有cpu,分给cpu随机的时间片,根据时间片大小进行结点data的排序 链表结点的建立 class Lin ...