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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM