zoukankan      html  css  js  c++  java
  • RedisCluster linux下批量删除 key

    Redis Cluster linux下批量删除键

    说明

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

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

    代码

    #!/usr/bin/env bash
    
    #######################################################################################
    #使用说明: 
    #  脚本需要设置 三个参数, 即:
    #     1. redis_home, 注意, 最后没有 /
    #     2. redis_password
    #     3. redis_enable_port redis集群中任意可用节点的端口
    #   参数设置完毕后, 执行脚本时, 可同时删除多个key, 匹配方式为 redis的 pattern.
    #	多个参数之间以空格隔开. 
    #   在任意redisCluster的节点上执行即可
    #   如 redis_batch_del.sh hello* hhh* *hhh*	
    #######################################################################################
    
    redis_home='/opt/TDS/redis/'
    
    #redis密码
    redis_password='redis'
    
    #redis 任意可用redis 服务端端口
    redis_enable_port='7001'
    
    #如果没有redis密码, 需要删除 -a $reis_password
    master_info=(`$redis_home/src/redis-cli -c -a $redis_password -p $redis_enable_port cluster nodes |grep 'master'`)
    
    address_array=()
    #获取所有master节点
    for item in ${master_info[@]}
    do
        if [[ $item =~ '@' ]]
        then
            echo '当前redis的 master 节点为:' $item
            address_array[${#address_array[*]}]=$item
        fi
    done
    
    #最终addresses 存储的为 ip port, 例 ${addresses[0]} 为 192.168.0.1 ${addresses[1]} 为 7001
    addresses=()
    for item in ${address_array[@]}
    do
        temp_split=(${item//@/ })
        ip_port=${temp_split[0]}
        temp_split=(${ip_port//:/ })
        addresses[${#addresses[*]}]=${temp_split[0]}
        addresses[${#addresses[*]}]=${temp_split[1]}
    done
    
    function del_key_with_pattern() {
    
        local length=${#addresses[*]}
        local index=0
        while [ $index -lt $length ]
        do
            local port_index=`expr $index + 1`
            #如果没有redis密码, 需要删除 -a $reis_password
            local redis_command="$redis_home/src/redis-cli -a $redis_password -c -h ${addresses[${index}]} -p ${addresses[${port_index}]}"
            #屏蔽错误信息.
            $redis_command keys $1 2>/dev/null |xargs -i $redis_command del {} >/dev/null 2>&1
            echo "清除节点: ${addresses[${index}]}:${addresses[${port_index}]} 的 $1 数据"
            index=`expr $port_index + 1`
        done
    }
    
    for item in "$@"
    do
        del_key_with_pattern $item
    done
  • 相关阅读:
    将文件写进数据库的方法
    立个Flag
    JQuery_学习1
    js制作一个简单的选项卡
    输出数据库中的表格的内容(pdo连接)
    不饮鸡汤的寂寞先生
    详细谈Session
    详细谈Cookie
    php字符串操作函数练习2
    ios开发网络学习五:MiMEType ,多线程下载文件思路,文件的压缩和解压缩
  • 原文地址:https://www.cnblogs.com/zyzdisciple/p/12188226.html
Copyright © 2011-2022 走看看