Redis Cluster linux下批量删除键

说明

使用时不支持传入参数 *, 如 redis_batch_del.sh *, 因为在linux下 会自动将 * 解析为当前目录下所有文件名, 目前还没有想到好的解决办法。

如果需要flushall 可以自行加入参数判断, 执行flushall。

代码

  1. #!/usr/bin/env bash
  2. #######################################################################################
  3. #使用说明:
  4. # 脚本需要设置 三个参数, 即:
  5. # 1. redis_home, 注意, 最后没有 /
  6. # 2. redis_password
  7. # 3. redis_enable_port redis集群中任意可用节点的端口
  8. # 参数设置完毕后, 执行脚本时, 可同时删除多个key, 匹配方式为 redis的 pattern.
  9. # 多个参数之间以空格隔开.
  10. # 在任意redisCluster的节点上执行即可
  11. # 如 redis_batch_del.sh hello* hhh* *hhh*
  12. #######################################################################################
  13. redis_home='/opt/TDS/redis/'
  14. #redis密码
  15. redis_password='redis'
  16. #redis 任意可用redis 服务端端口
  17. redis_enable_port='7001'
  18. #如果没有redis密码, 需要删除 -a $reis_password
  19. master_info=(`$redis_home/src/redis-cli -c -a $redis_password -p $redis_enable_port cluster nodes |grep 'master'`)
  20. address_array=()
  21. #获取所有master节点
  22. for item in ${master_info[@]}
  23. do
  24. if [[ $item =~ '@' ]]
  25. then
  26. echo '当前redis的 master 节点为:' $item
  27. address_array[${#address_array[*]}]=$item
  28. fi
  29. done
  30. #最终addresses 存储的为 ip port, 例 ${addresses[0]} 为 192.168.0.1 ${addresses[1]} 为 7001
  31. addresses=()
  32. for item in ${address_array[@]}
  33. do
  34. temp_split=(${item//@/ })
  35. ip_port=${temp_split[0]}
  36. temp_split=(${ip_port//:/ })
  37. addresses[${#addresses[*]}]=${temp_split[0]}
  38. addresses[${#addresses[*]}]=${temp_split[1]}
  39. done
  40. function del_key_with_pattern() {
  41. local length=${#addresses[*]}
  42. local index=0
  43. while [ $index -lt $length ]
  44. do
  45. local port_index=`expr $index + 1`
  46. #如果没有redis密码, 需要删除 -a $reis_password
  47. local redis_command="$redis_home/src/redis-cli -a $redis_password -c -h ${addresses[${index}]} -p ${addresses[${port_index}]}"
  48. #屏蔽错误信息.
  49. $redis_command keys $1 2>/dev/null |xargs -i $redis_command del {} >/dev/null 2>&1
  50. echo "清除节点: ${addresses[${index}]}:${addresses[${port_index}]} 的 $1 数据"
  51. index=`expr $port_index + 1`
  52. done
  53. }
  54. for item in "$@"
  55. do
  56. del_key_with_pattern $item
  57. done

RedisCluster linux下批量删除 key的更多相关文章

  1. Linux下批量删除空文件

    Linux下批量删除空文件(大小等于0的文件)的方法 find . -name "*" -type f -size 0c | xargs -n 1 rm -f 用这个还能够删除指定 ...

  2. linux下批量删除文件

    1. 在linux批量删除多级目录下同一格式的文件,可采用find + exec命令组合: 如在删除old目录下的,所有子目录中,后缀为.l的文件方法为: find old -type f -name ...

  3. Redis批量删除KEY的方法

    Redis 中有删除单个 Key 的指令 DEL,但好像没有批量删除 Key 的指令,不过我们可以借助 Linux 的 xargs 指令来完成这个动作. 代码如下: redis-cli keys “* ...

  4. Linux下批量管理工具pssh安装和使用

    Linux下批量管理工具pssh安装和使用 pssh工具包 安装:yum -y install pssh pssh:在多个主机上并行地运行命令 pscp:把文件并行地复制到多个主机上 prsync:通 ...

  5. redis 通配符 批量删除key

    Redis 中 DEL指令支持多个key作为参数进行删除 但不支持通配符,无法通过通配符批量删除key,不过我们可以借助 Linux 的管道和 xargs 指令来完成这个动作. 比如要删除所有以use ...

  6. [转帖]Linux下批量替换文件内容方法

    Linux下批量替换文件内容方法 https://www.cnblogs.com/fjping0606/p/4428850.html 刚才用到的命令 原作者写的挺好的记录一下 以后 用. 1:查找fi ...

  7. redis批量删除key 远程批量删除key

    一.遇到的问题 在开发的过程中,经常会遇到要批量删除某种规则的key,如缓存的课程数据“course-课程uid”,其中课程uid是变量,我们需要删除"course-*"这一类的数 ...

  8. linux下怎么删除名称带空格的文件

    linux下怎么删除名称带空格的文件-rm 'mysql bin.000005' 用引号把文件名括起来 某些情况下会出现名称带空格的文件, 如果想要删除的话,直接用rm mysql bin.00000 ...

  9. Redis:按照正则批量删除key

    Redis按照正则批量删除key redis目前还不支持批量删除key的命令,但是我们有时需要删除符合某个规则的keys,有两种方式: 1.使用redis-cli keys "test*&q ...

随机推荐

  1. H3C 帧中继基本配置命令(续)

  2. [转]ECMAScript 2016,2017 和 2018 中所有新功能的示例

    很难追踪 JavaScript(ECMAScript)中的新功能. 想找到有用的代码示例更加困难. 因此,在本文中,我将介绍 TC39 已完成 ES2016,ES2017 和 ES2018(最终草案) ...

  3. java多异常处理

    声明异常时尽可能声明具体异常类型,方便更好的处理; 方法声明几个异常就对应有几个catch块; 若多个catch块中的异常出现继承关系,父类异常catch块放在最后; 在catch语句块使用Excep ...

  4. spring security (BCryptPasswordEncoder)加密及判断密码是否相同

    通过BCryptPasswordEncoder的加密的相同字符串的结果是不同的,如果需要判断是否是原来的密码,需要用它自带的方法. 加密: BCryptPasswordEncoder encode = ...

  5. 【58.75%】【BZOJ 1087】[SCOI2005]互不侵犯King

    Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 3040  Solved: 1786 [Submit][Status][Discuss] Descri ...

  6. Curator源码阅读 - ConnectionState的管理与监听

    看看Curator框架 为实现对 连接状态ConnectionState的监听,都是怎么构造框架的.后面我们也可以应用到业务的各种监听中. Curator2.13实现 接口 Listener List ...

  7. Java虚拟机参数,增加虚拟机最大内存,在/etc/profile增加如下: export JAVA_OPTS="-Xms9g -Xmx9g"

    一.运行class文件 执行带main方法的class文件,Java虚拟机命令参数行为: java <CLASS文件名> 注意:CLASS文件名不要带文件后缀.class 例如: java ...

  8. filter 开发

    在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator(装饰器)模式对request.response对象进行包装,再把包装对象传给目 ...

  9. SQL Server内连接、左外连接、右外连接、完全连接、交叉lianjie

    数据准备: create table T1( A ) not null, B ) not null, C tinyint not null ); create table T2( B ) not nu ...

  10. shelve模块、re模块

    在模糊匹配时使用 1