codis错误:ResponseError: handle response, backend conn fail
使用codis,遇到错误提示如下: ResponseError: handle response,backend conn failure,bad array len,too long 背景: 一个hash表中有上500w的键数据,在使用hkeys命令时,会显示错误ResponseError: handle response,too long。 一个有序集合键数量超过180w条数据,在使用zrange时,也会提示错误ResponseError: handle response,too long。 问题原因: const?( MaxBulkBytesLen?=?1024?*?1024?*?512 MaxArrayLen?????=?1024?*?1024 ) 是因为codies的代码限制键数量不能超过1024*1024,一次返回数据最大不超过1024*1024*500字节。 而codis根据?Redis 协议里面 BulkBytesArray 不应该有超过 1024x1024 个数据。 func?(d?*Decoder)?decodeArray()?([]*Resp,?error)?{???? n,?err?:=?d.decodeInt()???? if?err?!=?nil?{???? return?nil,?err???? }???? switch?{???? case?n?<?-1:???? return?nil,?errors.Trace(ErrBadArrayLen)???? case?n?>?:???? return?nil,?errors.Trace(ErrBadArrayLenTooLong)???? case?n?==?-1:???? return?nil,?nil???? }???? array?:=?make([]*Resp,?n)???? for?i?:=?range?array?{???? r,?err?:=?d.decodeResp()???? if?err?!=?nil?{???? return?nil,?err???? }???? array[i]?=?r???? }???? return?array,?nil???? } https://github.com/CodisLabs/codis/blob/release3.1/pkg/proxy/redis/decoder.go#L193 解决办法:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |