• 任意指定一个key获取该key所处在哪个node节点


    需求:任意指定一个key获取该key所处在哪个node节点上。

    说明:redis自带的命令可以知道一个key所属的slot,可以知道node master对应哪些slot,但没有key和node的对应关系,使用该脚本,再也不需要猜了,可以在规划key的时候参考一下。

    #获取指定的key在哪个slot上,该key可以是存在的或者不存在的均可。
    key_slot=`redis-cli -h 5.5.5.101 -p 29001 -a abc123 -c cluster keyslot $1`
    
    #获取node和slot的分布,输出格式如下,开始的#是注释,并非有效数据
    #5.5.5.101|0-5461
    #5.5.5.102|5462-10922 
    #5.5.5.103|10923-16383
    node_slot=`redis-cli -h 5.5.5.101 -p 29001 -a abc123 -c cluster nodes | grep master | awk -F' |:' '{print $2"|"$NF}'`
    
    #判断是否找到对应的slot
    find_tag=0
    for i in $node_slot
    do
        node_ip=`echo $i | awk -F '[|]' '{print $1}'`
        start_slot=`echo $i | awk -F '[|]' '{print $2}' | awk -F '[-]' '{print $1}'`
        end_slot=`echo $i | awk -F '[|]' '{print $2}' | awk -F '[-]' '{print $2}'`
        for((j=$start_slot;j<=$end_slot;j++))
        do
            if [[ $j == $key_slot ]];then
                echo $node_ip
                find_tag=1
            fi
        done
        if [[ $find_tag == 1 ]];then
            #找到后,退出循环,因为slot不会有重复的
            break
        fi
    done

     测试

    [redis@lxd-vm1 ~]$ sh get_node.sh a
    5.5.5.103
    [redis@lxd-vm1 ~]$ sh get_node.sh b
    5.5.5.101
    [redis@lxd-vm1 ~]$ sh get_node.sh c
    5.5.5.102
    [redis@lxd-vm1 ~]$ sh get_node.sh 1{abc}1
    5.5.5.102
    [redis@lxd-vm1 ~]$ sh get_node.sh 2{abc}2
    5.5.5.102
    [redis@lxd-vm1 ~]$ sh get_node.sh hello{lxd}world
    5.5.5.101
    [redis@lxd-vm1 ~]$ sh get_node.sh new{lxd}year
    5.5.5.101
    [redis@lxd-vm1 ~]$ 
  • 相关阅读:
    python——时间与时间戳之间的转换
    Python3中正则模块re.compile、re.match及re.search
    javascript 模块化开发
    Python细说 xrange 和 range 的区别
    PyInstaller 生成exe文件
    win10安装mysql5.7.14winx64遇到服务无法启动问题解决方法
    Python 自定义队列 数据结构
    spring事务使用心得
    LS 存取文件
    Single Instance Application
  • 原文地址:https://www.cnblogs.com/imdba/p/10197192.html
Copyright © 2020-2023  润新知