redis异常在这里

err protocol error: invalid multibulk length

finally, I figured it out.
the length of args of the API command MSET can’t be bigger than 1024 * 1024, so the length of the array KeyValuePair
(RedisKey, RedisValue)[] values cant be bigger than 524288, so I limit it to 524287, then it works.
I hope this would be helpful others.

redis官方源码:

/* We know for sure there is a whole line since newline != NULL,
         * so go ahead and find out the multi bulk length. */
        redisAssertWithInfo(c,NULL,c->querybuf[0] == '*');
        ok = string2ll(c->querybuf+1,newline-(c->querybuf+1),&ll);
        if (!ok || ll > 1024*1024) {
            addReplyError(c,"Protocol error: invalid multibulk length");
            setProtocolError(c,pos);
            return REDIS_ERR;
        }

存储的时候分段吧

public void storeResult(Integer totalCount, String matrixActionKey, List<String> resultList, String blueBall) {
        /* 过滤前的个数*/
        if (totalCount >= 10000) {
            /* 红球结果 过期时间 5分钟*/
            Boolean isDiv = Boolean.TRUE;
            while (isDiv) {
                List<String> storeList;
                if (resultList.size() - (524287) > 0) {
                    storeList = resultList.subList(0, 524287 - 1);
                    resultList = resultList.subList(524287, resultList.size() - 1);
                } else {
                    storeList = resultList;
                    isDiv = Boolean.FALSE;
                }
                redisService.kryoLPushStr(matrixActionKey, storeList.toArray(new String[storeList.size()]));
            }
            redisService.expire(matrixActionKey, RedisConstant.EXPIRE_TIME_SECOND_FIVE_MINUTE);
            /* 篮球号码存一下*/
            redisService.kryoSetEx(RedisConstant.getMatrixActionBlueKey(matrixActionKey), RedisConstant
                    .EXPIRE_TIME_SECOND_FIVE_MINUTE, blueBall);
        }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

左钦杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值