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