easyswoole 使用redis执行geoRadiusByMember Count无效修复

1 篇文章 0 订阅

此BUG作者已更新:https://github.com/easy-swoole/redis/pull/23/files 

问题原因 ,geoRadiusByMember  参数列表如下,使用Count的时候需要带上 Count  X 条数,例如需要5条就是 Count  5,

GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

而框架提供的方法 

geoRadiusByMember($key, $location, $radius, $unit, $withCoord, $withDist, $withHash, $count, $sort, $storeKey, $storeDistKey);

存在count参数,但是怎么设置也没有效果,设置数组还要报错,跟踪问题,定位

vendor/easyswoole/redis/src/Client.php文件方法,此处为考虑到count这种特殊情况,

 

 public function sendCommand(array $commandList): bool
    {
        $argNum = count($commandList);
        $str = "*{$argNum}\r\n";
        foreach ($commandList as $value) {
            $len = strlen($value);
            $str = $str . '$' . "{$len}\r\n{$value}\r\n";
        }
        return $this->send($str);
    }

修改如下,即可正常返回

public function sendCommand(array $commandList): bool
    {
        $argNum = 0;
        foreach ($commandList as $data ){
            if(is_array($data)){
                $argNum  = $argNum  + (count($data) + 1);
            }else{
                $argNum ++;
            }            
        }
        $str = "*{$argNum}\r\n";
        foreach ($commandList as $value) {
            if(is_array($value)){
                foreach ($value as $key => $values) {
                    $len = strlen($key);
                    $str = $str . '$' . "{$len}\r\n{$key}\r\n";
                    
                    $len = strlen($values);
                    $str = $str . '$' . "{$len}\r\n{$values}\r\n";
                }
            }else{
                $len = strlen($value);
                $str = $str . '$' . "{$len}\r\n{$value}\r\n";
            }            
        }
        return $this->send($str);
    }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值