Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1689401
  • 博文数量: 186
  • 博客积分: 3044
  • 博客等级: 中校
  • 技术积分: 2493
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-25 15:04
文章分类

全部博文(186)

文章存档

2024年(2)

2022年(4)

2021年(3)

2020年(1)

2019年(5)

2018年(13)

2017年(6)

2016年(10)

2015年(11)

2014年(11)

2013年(13)

2012年(23)

2011年(25)

2010年(2)

2008年(1)

2007年(5)

2006年(51)

分类: NOSQL

2019-01-31 10:17:10


我们都需要删除redis中某些具有相似特征的key,即使是线上环境也是。如果key数量很小容易处理,如果这些key很多很多,必须通过scan命令循环扫描一一删除,如果直接执行keys命令会堵死redis服务。下面这个脚本就是通过循环扫码key再删除,直至结束。

点击(此处)折叠或打开

  1. redis-del-keys.sh

  2. #!/bin/bash
  3. ##redis主机IP
  4. host=$1
  5. ##redis端口
  6. port=$2
  7. ##key模式
  8. pattern=$3
  9. ##游标
  10. cursor=0
  11. ##退出信号
  12. signal=0

  13. ##循环获取key并删除
  14. while [ $signal -ne 1 ]
  15.     do
  16.         echo "cursor:${cursor}"
  17.         sleep 2
  18.         ##将redis scan得到的结果赋值到变量
  19.         re=$(redis-cli -h $host -p $p -c scan $cursor count 1000 match $pattern)
  20.         ##以换行作为分隔符
  21.         IFS=$'\n'
  22.         #echo $re
  23.         echo 'arr=>'
  24.         ##转成数组
  25.         arr=($re)
  26.         ##打印数组长度
  27.         echo 'len:'${#arr[@]}
  28.         ##第一个元素是游标值
  29.         cursor=${arr[0]}
  30.         ##游标为0表示没有key了
  31.         if [ $cursor -eq 0 ];then
  32.             signal=1
  33.         fi
  34.         ##循环数组
  35.     for key in ${arr[@]}
  36.         do
  37.             echo $key
  38.             if [ $key != $cursor ];then
  39.                 echo "key:"$key
  40.                 ##删除key
  41.                 redis-cli -h $host -p $port -c del $key >/dev/null 2>&1
  42.             fi
  43.     done
  44. done
  45. echo
/redis-del-keys.sh localhost 6379 user:*
表示删除本机6379端口的redis中user:开头的所以key。

阅读(4561) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~