zoukankan      html  css  js  c++  java
  • 删除redis中指定key模式的数据的shell脚本

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

    redis-del-keys.sh

    #!/bin/bash
    ##redis主机IP
    host=$1
    ##redis端口
    port=$2
    ##key模式
    pattern=$3
    ##游标
    cursor=0
    ##退出信号
    signal=0
    
    ##循环获取key并删除
    while [ $signal -ne 1 ]
        do
            echo "cursor:${cursor}"
            sleep 2
            ##将redis scan得到的结果赋值到变量
            re=$(redis-cli -h $host -p $port -c  scan $cursor count 1000 match $pattern)
            ##以换行作为分隔符
            IFS=$'
    ' 
            #echo $re
            echo 'arr=>'
            ##转成数组
            arr=($re)
            ##打印数组长度
            echo 'len:'${#arr[@]}
            ##第一个元素是游标值
            cursor=${arr[0]}
            ##游标为0表示没有key了
            if [[ $cursor -eq 0 ]];then
                signal=1
            fi
            ##循环数组
        for key in ${arr[@]}
            do
                echo $key
                if [ $key != $cursor ];then
                    echo "key:"$key
                    ##删除key
                    redis-cli -h $host -p $port -c del $key >/dev/null  2>&1
                fi
        done
    done
    echo 'done'

    使用方式:

    ./redis-del-keys.sh localhost 6379 user:*

    表示删除本机6379端口的redis中user:开头的所以key。

  • 相关阅读:
    ASP.NET对IIS中的虚拟目录进行操作
    QLive EULA
    Windows Phone在模拟器中去除Debug信息
    Windows Phone区别应用是App还是Game
    UI Automation By Microsoft
    UIA: Choose item in Combobox
    身份证号码验证 C#
    Windows Phone 获取窗口大小
    重载 Sort, ==, !=
    C++枚举类型
  • 原文地址:https://www.cnblogs.com/yinliang/p/13632821.html
Copyright © 2011-2022 走看看