#!/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

转载于:https://www.cnblogs.com/linlianhuan/p/9872967.html

redis扫描特定keys脚本,可避免阻塞,不影响线上业务相关推荐

  1. BAT脚本一键更新提交代码到线上

    如果你发现你每天都在做一件非常繁琐的事情那么必定能将他简单化操作! 发现: 当开发把代码提交到了代码服务器之后就没他们什么事情了,剩下的就是我们去将代码推送到线上服务器,这个过程并不复杂,但是非常的繁 ...

  2. 深入理解redis中的lua脚本

    本文来说下redis中的lua脚本 文章目录 概述 Lua简介 使用Lua脚本的好处 Redis+Lua实现限流 本文小结 概述 今天讲一些redis和lua脚本的相关的东西,lua这个脚本是一个好东 ...

  3. Redis中的Lua脚本怎么玩

    Redis中的Lua脚本怎么玩 Lua是一门强大.快速.轻量的嵌入式脚本语言,我们日常开发中接触的最多的还是Redis为保证原子性使用Lua执行多命令的一种方法,那么现在先来熟悉Lua基本用法. Lu ...

  4. php redis 删除key 通配符,php redis 批量删除keys的方法

    php redis批量删除keys的方法:首先打开命令窗口:然后通过命令"redis-cli keys video* | xargs redis-cli del"实现批量删除key ...

  5. redis中使用lua脚本

    一.概述 1.什么是lua脚本 Lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放. 其设计目的就是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能.因为广泛的应用于:游戏开 ...

  6. php 批量删除redis缓存,php redis 批量删除keys的方法

    php redis批量删除keys的方法:首先打开命令窗口:然后通过命令"redis-cli keys video* | xargs redis-cli del"实现批量删除key ...

  7. Redis学习笔记 - Lua脚本(2) - Lua脚本的实现

    参考:<<Redis设计与实现>> 注:这本书是基于Redis3.0版本写的,和后面的版本有点差异 Redis中Lua脚本相关命令介绍以及简单使用,参考博客:https://b ...

  8. redis批量删除keys

    如何批量删除Redis下特定pattern的keys DEL删除给定的一个或多个key,不存在的key会被忽略,返回值:被删除key的数量 DUMP序列化给定key,返回被序列化的值,使用RESTOR ...

  9. Redis中缓存Lua 脚本

    为什么要缓存 在脚本比较长的情况下,如果每次调用脚本都需要把整个脚本传给Redis 服务端,会产生比较大的网络开销.为了解决这个问题,Redis 提供了EVALSHA 命令,允许开发者通过脚本内容的S ...

最新文章

  1. FireFox不支持cursor:hand
  2. 升级GCC 4.6后的warning: ”variable set but not used“
  3. 开发非代码的业务知识
  4. 160个Crackme009
  5. java设计模式之简单工厂模式
  6. 27岁博士毕业,32岁成清华博导!黄高助理教授:DenseNet发明者
  7. 四叶草剧场服务器维修价格,四叶草剧场不合理报酬机制是什么-不合理报酬机制和收益详解-Appfound...
  8. VS中PCL库附加依赖项配置
  9. ZZULIOJ 1127: 矩阵乘积
  10. FAQ系列 | mysqldump选项之skip-opt
  11. android 音视频录制
  12. 用计算机弹奏天下,天下手游大荒怪题答题器 大荒怪题题库及答案大全
  13. 关于使用stm8单片机的“外部计数”TIMx_ETR测脉冲的软件配置问题!
  14. 唐太宗管理之道:收人,收心,收天下
  15. 我用过的最好脑图工具——Xmind(含安装包)
  16. 结合进化心理学,解析陌生交友产品的三大问题
  17. Java多进程从头讲到尾,值得收藏!
  18. 应用内版本更新库UpdateVersion
  19. 程序员求职高峰期,这12条工作小技巧必看
  20. 少年歌曲计算机教程,《计算机教程第21学时》青少年文学教育丛书.pdf

热门文章

  1. 江苏大学矩阵论、数理统计期末考试复习
  2. JDK11+Maven开发JavaFx启动问题:java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper
  3. 【MyBatis笔记】02-MyBatis配置SQL打印
  4. 那年学过的Java笔记三核心类库一
  5. Python模拟浏览器向 CSDN发送POST请求的方法
  6. Linux运维问题解决(3)——VMware启动虚拟机报错 : 该虚拟机似乎正在使用中。如果该虚拟机未在使用,请按“获取(T)
  7. 原理简单,但不知道怎么用?一文看懂「同期群模型」
  8. 不会python怎么了?靠敏捷BI和数据可视化,照样去阿里腾讯
  9. 正确选择报表工具的十大标准
  10. c语言如何写地图,自己用C语言写的扫雷地图