php 使用predis集群操作

本文介绍如何使用Predis库在PHP中操作Redis集群,包括安装配置、连接集群、获取槽节点信息及执行批量删除操作。通过示例代码展示了如何计算key与节点的对应关系,并使用管道发送命令来提高效率。

文件目录结构如下

1、composer  predis

composer require predis/predis

2、cluster.php

require "vendor/autoload.php";

$parameters = [
    '139.159.141.107:6381',
    '139.159.141.107:6382',
    '139.159.141.107:6383',
    '139.159.141.107:6384'
];
$options    = [
    'cluster' => 'redis',
    'parameters' => [
        'password' => "binleen",
    ]
];
$client = new Predis\Client($parameters, $options);
$parameters = $parameters[array_rand($parameters)];
$connectionInfo = explode(':',$parameters);
//得到槽节点信息,保存在某个缓存文件当中
$slotInfo = $client->getClientFor($parameters)->executeRaw(['cluster','slots']);//获取结果如下图1
$slotNodes = [];
    /*  槽范围     节点ip   :节点端口号
     * [1,1000]=>139.159.141.107:6381
     *
     * */
foreach($slotInfo as $slot){
    $slotNodes[$slot[0].",".$slot[1]] = $slot[2][0].":".$slot[2][1];
}
 //var_dump($slotNodes);//获取结果如下图二
 //执行批量删除操作
 $delKeys = ["test1","test2","name","age","score"];
 //2.得到key跟节点的对应关系
 $crc = new \Predis\Cluster\Hash\CRC16();
/*
* 使用管道发送命令,可以节约一点网络资源
* ['139.159.141.107:6381']=>'name1,name2'
* ['139.159.141.107:6382']=>'name4,name5'
* ['139.159.141.107:6383']=>'name3'
*
* */
$delNodes = [];
foreach($delKeys as $keyName){
    $code = $crc->hash($keyName) % 16384; //计算出某个key对应的槽节点

    //循环匹配,如果key在某个节点的范围之内就拼接数据(有可能多个key在同一节点) key:ip+端口 $val:节点范围
    array_walk($slotNodes,function($key,$val) use ($code,&$delNodes,$keyName){
        $slots = explode(",",$val);
       if($code >= $slots[0] && $code <= $slots[1]){
           $delNodes[$key][] = $keyName;
       }

    });

}
//    var_dump($delNodes);//结果显示如下图三
//执行命令并且返回结果
foreach ($delNodes as $key=>$nodes){
    $info = $client->getClientFor($key)->pipeline(function($pipe) use ($nodes){
        foreach($nodes as $val){
            $pipe->del($val);
        }
    });
}
图一

                                                                                

图二
图二
图三
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值