redis扫描特定keys脚本,可避免阻塞,不影响线上业务
#!/bin/sh
## 该脚本用来查询redis集群中,各个实例当中特定前缀的key,对应只需要修改redis的其中一个实例的 host和port
## 脚本会自动识别出该集群的所有实例,并查出对应实例中的所有key
## 该脚本适用于线上环境,因为在遍历过程中,限制了服务器单次遍历字典槽位数量
## 建议建立一个独立的目录来执行脚本,重复执行脚本,会先清空部分记录中间结果的文件内容
## scan 命令提供了三个参数: 第一个是cursor 整数值,第二个是 key的正则表达式, 第三个是 遍历的limit hint
## 第一次遍历时,cursor值为0,然后将返回结果中第一个整数值作为为一次遍历的cursor。一直遍历到返回的cursor值为0时结束
host=10.240.47.147
port=7000
limit_hint=1000
# 获取redis集群各实例的 host 和 port
redis-cli -h $host -p $port cluster nodes| grep master | awk '{print $2}' | awk -F ':' '{print $1 " " $2 }' > redis_object.info
# 清空用来记录各个实例的 keys 的文件内容
more redis_object.info | grep -v ^$ | while read line
do
#echo "**** " $line
h=`echo $line | awk '{print $1}'`
p=`echo $line | awk '{print $2}'`
#echo "----" $h "---" $p "---"
> keys_for_each_redis_object_${h}_${p}.log
done
# 获取redis各实例最新的keys 情况
more redis_object.info | grep -v ^$ | while read line
do
echo " ***** " $line " *****"
h=`echo $line | awk '{print $1}'`
p=`echo $line | awk '{print $2}'`
a=`redis-cli -h $h -p $p scan 0 match 1_9_* count 100`
number=`echo $a | awk '{print $1}'`
echo $a | awk '{OFS="\n"; $1=$1; print $0}' >> keys_for_each_redis_object_${h}_${p}.log
while(true)
do
if [ $number -eq 0 ]
then
break
fi
a=`redis-cli -h $host -p $port scan $number match 1_9_* count $limit_hint`
number=`echo $a | awk '{print $1}'`
echo $a | awk '{OFS="\n"; $1=$1; print $0}' >> keys_for_each_redis_object_${h}_${p}.log
sleep 1
echo " sleep 1"
done
done
redis扫描特定keys脚本,可避免阻塞,不影响线上业务的更多相关文章
- 【解决】MongoDB 线上业务处理,数据去重脚本实现
mongo客户端工具下载 https://robomongo.org/download 线上业务,k线 展示出现问题,相同时间戳的数据多次插入导致数据不真实,后经排查发现是每次都是写的四条数据, ...
- Redis进阶实践之十九 Redis如何使用lua脚本
一.引言 redis学了一段时间了,基本的东西都没问题了.从今天开始讲写一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运行在任何平台上,也可以嵌入 ...
- redis中keys命令带来的线上性能问题
起因 下午接到运维反馈,生产redis有个执行keys的命令请求太慢了,要两三秒才能响应 涉及命令如下: KEYS ttl_600::findHeadFootData-15349232-*-head ...
- Redis中的原子操作(2)-redis中使用Lua脚本保证命令原子性
Redis 如何应对并发访问 使用 Lua 脚本 Redis 中如何使用 Lua 脚本 EVAL EVALSHA SCRIPT 命令 SCRIPT LOAD SCRIPT EXISTS SCRIPT ...
- redis中使用java脚本实现分布式锁
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/115.html?1455860390 edis被大量用在分布式的环境中,自 ...
- redis安全删key脚本(模糊匹配,长list,大set等)
两种情况: 1.删除指定前缀开头的rediskey ,扫描和删除过程中对线上无感知 2.删除一个大的list,set,zset,hash,这种得分批次减少大小,一直缩到0再删 第一种情况:只要知道线上 ...
- 在redis中使用lua脚本
在实际工作过程中,可以使用lua脚本来解决一些需要保证原子性的问题,而且lua脚本可以缓存在redis服务器上,势必会增加性能. 不过lua也会有很多限制,在使用的时候要注意. 在Redis中执行Lu ...
- redis中使用lua脚本
lua脚本 Lua是一个高效的轻量级脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能 使用脚本的好处 1.减少网络开销,在Lua脚 ...
- 新姿势!Redis中调用Lua脚本以实现原子性操作
背景:有一服务提供者Leader,有多个消息订阅者Workers.Leader是一个排队程序,维护了一个用户队列,当某个资源空闲下来并被分配至队列中的用户时,Leader会向订阅者推送消息(消息带有唯 ...
随机推荐
- js 禁用F12 和右键查看源码
<script> window.onkeydown = function(e) { if (e.keyCode === 123) { e.preventDefault() } } wind ...
- 记一些使用mpvue时遇到的问题
一.在mpvue中使用vuex(和在vue中使用不同) 1.vue中使用vuex,在main.js中: import store from './store' new Vue({ store }) ...
- mac终端解决很多系统自带命令找不到问题
node安装提示npm command not found 1.打开终端 2.输入命令如下: touch~/.bash_profile (创建.bash_profile文件,-表示在-目录下,.表示 ...
- 深入理解python元类
类也是对象 在理解元类之前,你需要先掌握Python中的类.Python 中的类概念借鉴 Smalltalk,这显得有些奇特.在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段.当然在 P ...
- 18、远程管理卡、戴尔划RAid
1.配置远程管理卡: 第一个iDRAC6是远程控制卡名称 第三个LAN ...是配置远程控制卡的 下图配置结束按Esc退出 最后按Esc保存退出 2.windows配置远程管理卡: 把下载下来的软件安 ...
- Linux系统下C语言获取Time
获取时间的函数有很多,具体包括如下: time()/gettimeofday()等等,下面是获取具体到usecond的时间程序: #include <iostream> #include ...
- 抄来的,占个位儿【百度架构师是怎样搭建MySQL分布式集群】
1.准备集群搭建环境 使用6台虚拟机来搭建MySQL分布式集群,相应的实验环境与对应的MySQL节点之间的对应关系如下图所示: 管理节点(MGM):这类节点的作用是管理MySQLCluster ...
- HDU 多校第四场题解
对于 D 题的原题意,出题人和验题人赛前都没有发现标算存在的问题,导致了许多选手的疑惑和时间的浪费,在此表示真诚的歉意! 预计难度分布: Easy - DJKL, Medium - ABCEG, Ha ...
- 关于enter事件的触发
如果您使用了antd的Button组件,那么恭喜已经封装好了,只要加上htmlType='submit', 如果没有使用其他框架,使用onPress或者onKeydown事件,判断e.keycode ...
- Linux——awk
https://blog.csdn.net/jin970505/article/details/79056457 可以根据特定规则输出文本文件内容