phpredis集羣(cluster)下同一個槽下執行sdiffstore報錯:Error processing response from Redis node!

public function sdiffNotInbasicIpData(){
		$set_key1 = '{ip}:aaa';
		$set_key2 = '{ip}:bbb';
		$redis_obj   =  new \redis();
		$store_key = '{ip}:ccc';
		$es = $redis_obj->sdiffstore($store_key,$set_key1,$set_key2);
		exit;
}

RedisCluster->sdiffstore('{ip}:ccc...', '{ip}:aaa...', '{ip}:bbb...')

提示報錯:Error processing response from Redis node!

 

通過shell窗口連接到redis-cli,執行上述命令,成功

 

排查phpredis的源碼包文件,https://pecl.php.net/package/redis;用的5.0.2版本;

找到上述報錯文件cluster_library.c,重點查看1195和1640行。

修改部分代碼,進行調試,

resp = cluster_check_response(c, &c->reply_type);
        
        char dlstr[25];
        sprintf(dlstr, "%d", resp); 
         CLUSTER_THROW_EXCEPTION(
                dlstr, 0);

 

修改cluster_check_response函數中,所有return -1的行,修改成不同的值,比如-2,-3.

編譯,重新執行php文件,找到原因是因爲紅色字符部分

 if ( -1 == redis_check_eof(c->cmd_sock, 1)  )
    {
        return -2;
    }
    
     if ( EOF == (*reply_type = php_stream_getc(c->cmd_sock->stream)) )
    {  
        return -6; 
    }

 

 

讀一個字符int php_stream_getc(php_stream *stream);// 讀取指定數量的字符size_t 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章