Redis ERR Protocol error: invalid multibulk length

异常信息 

org.springframework.data.redis.RedisConnectionFailureException: ERR Protocol error: invalid multibulk length; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: ERR Protocol error: invalid multibulk lengthCaused by: redis.clients.jedis.exceptions.JedisConnectionException: ERR Protocol error: invalid multibulk lengthat redis.clients.jedis.Connection.sendCommand(Connection.java:138) ~[jedis-2.9.0.jar!/:?]at redis.clients.jedis.BinaryClient.del(BinaryClient.java:132) ~[jedis-2.9.0.jar!/:?]at redis.clients.jedis.BinaryJedis.del(BinaryJedis.java:291) ~[jedis-2.9.0.jar!/:?]at org.springframework.data.redis.connection.jedis.JedisKeyCommands.del(JedisKeyCommands.java:121) ~[spring-data-redis-2.1.9.RELEASE.jar!/:2.1.9.RELEASE]... 38 more
Caused by: java.net.SocketException: Broken pipe (Write failed)at java.net.SocketOutputStream.socketWrite0(Native Method) ~[?:1.8.0_111]at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109) ~[?:1.8.0_111]at java.net.SocketOutputStream.write(SocketOutputStream.java:153) ~[?:1.8.0_111]at redis.clients.util.RedisOutputStream.flushBuffer(RedisOutputStream.java:52) ~[jedis-2.9.0.jar!/:?]at redis.clients.util.RedisOutputStream.write(RedisOutputStream.java:76) ~[jedis-2.9.0.jar!/:?]at redis.clients.util.RedisOutputStream.write(RedisOutputStream.java:66) ~[jedis-2.9.0.jar!/:?]at redis.clients.jedis.Protocol.sendCommand(Protocol.java:100) ~[jedis-2.9.0.jar!/:?]at redis.clients.jedis.Protocol.sendCommand(Protocol.java:84) ~[jedis-2.9.0.jar!/:?]at redis.clients.jedis.Connection.sendCommand(Connection.java:127) ~[jedis-2.9.0.jar!/:?]at redis.clients.jedis.BinaryClient.del(BinaryClient.java:132) ~[jedis-2.9.0.jar!/:?]at redis.clients.jedis.BinaryJedis.del(BinaryJedis.java:291) ~[jedis-2.9.0.jar!/:?]at org.springframework.data.redis.connection.jedis.JedisKeyCommands.del(JedisKeyCommands.java:121) ~[spring-data-redis-2.1.9.RELEASE.jar!/:2.1.9.RELEASE]... 38 more

报错原因: redis 执行条件过长 

错误代码: 

/*** 批量删除* @param   prex为迷糊匹配的key,如cache:user:* */public void redisDeleteByPrex(String prex) {Set<String> keys = redisTemplate.keys(prex);if (CollectionUtils.isNotEmpty(keys)) { redisTemplate.delete(keys); }}

这里采用前匹配查询,获取到需要删除的数据超过 1M 所以报错

1M 这个结果来自  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;}

参考: https://blog.csdn.net/sinat_29843547/article/details/77512585

解决方案:

将查询结果分批处理 控制大小在1M内

修改代码如下:

    /*** 批量删除* @param   prex为迷糊匹配的key,如cache:user:* */public void redisDeleteByPrex(String prex) {Set<String> keys = redisTemplate.keys(prex);if (CollectionUtils.isNotEmpty(keys)) {List<String> list = new ArrayList<>(keys);// 为防止查出的数据过大分批删除  一次10wList<List<String>> splitList = CommonUtil.splitList(list, 100000);for (List<String> list2 : splitList) {redisTemplate.delete(list2);}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/23371.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《手把手教你》系列基础篇之4-python+ selenium自动化测试-xpath使用(详细教程)

1. 简介 俗话说&#xff1a;磨刀不误砍柴工&#xff0c;因此在我们要开始写自动化脚本之前&#xff0c;我们先来学习和了解几个基本概念&#xff0c;在完全掌握了这几个概念之后&#xff0c;有助于我们快速上手&#xff0c;如何去编写自动化测试脚本。 元素&#xff0c;在这个…

vue-制作自动滚动效果

第一步&#xff1a;下载 可以查看官方地址chenxuan0000 npm i vue-seamless-scroll -save 第二步&#xff1a;引用 import vueSeamlessScroll from "vue-seamless-scroll";//注册components: {vueSeamlessScroll,}, 第三步&#xff1a;使用 <vue-seamless…

MongoDB面试题

1. NoSQL 数据库是什么意思?NoSQL 与 RDBMS 直接有什么区别?为什么要使用和不使用 NoSQL 数据库?说一说 NoSQL 数据库的几个优点? NoSQL 是非关系型数据库&#xff0c;NoSQL Not Only SQL。 关系型数据库采用的结构化的数据&#xff0c;NoSQL 采用的是键值对的方式存储数…

常用数据处理方式

文章目录 一、不同格式数据读取及转换split data into X and y二、数据预处理1、去重2、删除某一列3、删除两行4、date转字符串5、修改类型6、修改日期类型7、修改字段名8、加年月9、 删除字段10、 查看数据中顶部10%的数据11、设置索引12、判断空值13、排序14、 模糊查询15、修…

linux部署springboot项目中文乱码

问题描述&#xff1a; 将springboot项目打成jar包部署到linux服务器发现中文乱码 解决办法&#xff1a; java -Dfile.encodingutf-8 -jar xxxxx.jar转载至&#xff1a;https://blog.csdn.net/qq_39706515/article/details/119807632

Java---使用lombok简化实体类的编写----不要再写getter+sertter方法了

目录 使用lombok简化实体类的编写 首先&#xff1a; 加入lombok依赖&#xff1a; 然后 加上一个注解&#xff1a;Data 使用lombok简化实体类的编写 首先&#xff1a; 加入lombok依赖&#xff1a; <dependency><groupId>org.projectlombok</groupId>…

【问题随记】

ubuntu 14.04源更新(sources.list) deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ trusty-update…

clickhouse查询缓存

为了实现最佳性能&#xff0c;数据库需要优化其内部数据存储和处理管道的每一步。但是数据库执行的最好的工作是根本没有完成的工作&#xff01;缓存是一种特别流行的技术&#xff0c;它通过存储早期计算的结果或远程数据来避免不必要的工作&#xff0c;而访问这些数据的成本往…

软件测试需求分析的常用方法

软件测试需求分析时&#xff0c;应要求产品人员对需求进行讲解&#xff0c;并使用相对应的方法进行科学分析&#xff0c;否则无法保障软件测试的完整性和科学性&#xff0c;从而造成在项目中后期Bug频出、风险增大等问题。 而常用的测试需求分析的方法&#xff1a; 1、功能分解…

Protobuf

Protobuf&#xff08;Googles Protocol Buffers&#xff09;是一种灵活、高效、自动化的二进制序列化格式&#xff0c;它可以用于数据存储、通信协议等场景。相比其他序列化格式&#xff08;如JSON、XML等&#xff09;&#xff0c;Protobuf在序列化和反序列化速度和数据大小方面…

解决 MySQL 删除数据后,ID 自增不连续问题

修复前 除了部分数据&#xff0c;导致后续新增的数据&#xff0c;ID 自增不连续 解决方案 执行下方 SQL 语句即可修复此问题&#xff0c;mbs_order为需要修复的表名 SET i0; UPDATE mbs_order SET id(i:i1); ALTER TABLE mbs_order AUTO_INCREMENT0;

进程与线程、线程创建、线程周期、多线程安全和线程池(ThreadPoolExecutor)

目录 进程与线程线程和进程的区别是什么&#xff1f;线程分两种&#xff1a;用户线程和守护线程线程创建四种方式run()和start()方法区别&#xff1a;为什么调用 start() 方法时会执行 run() 方法&#xff0c;为什么不能直接调用 run() 方法&#xff1f;Runnable接口和Callable…

该选择WPF 还是 Winform?

WPF和WinForms都是.NET平台下的桌面应用程序开发框架&#xff0c;它们各有特点&#xff0c;适用于不同的场景和需求。下面是对WPF和WinForms的一些比较和优劣势&#xff1a;WPF&#xff08;Windows Presentation Foundation&#xff09;&#xff1a;WPF具有强大的图形渲染能力&…

刷题笔记 day7

力扣 209 长度最小的子数组 解法&#xff1a;滑动指针&#xff08;对同向双指针区间内的数据处理&#xff09; 1&#xff09;先初始化 两个指针 left &#xff0c;right。 2&#xff09;右移指针right的同时使用sum记录指针right处的值&#xff0c;并判断sum的值是否满足要求&…

在CSDN学Golang场景化解决方案(分布式日志系统)

一&#xff0c;传统 elk 解决方案及其弊端 传统ELK&#xff08;Elasticsearch Logstash Kibana&#xff09;方案是一种流行的分布式日志系统解决方案&#xff0c;但也存在一些弊端&#xff1a; 依赖性&#xff1a;ELK使用Java编写&#xff0c;需要安装JVM&#xff0c;并且还…

iOS--Runloop

Runloop概述 一般来说&#xff0c;一个线程一次只能执行一个任务&#xff0c;执行完成后线程就会退出。就比如之前学OC时使用的命令行程序&#xff0c;执行完程序就结束了。 而runloop目的就是使线程在执行完一次代码之后不会结束程序&#xff0c;而是使该线程处于一种休眠的状…

更新页面无法回显

需求与问题&#xff1a; 在菜品管理开发中&#xff0c;我需要修改菜品&#xff0c;第一步是回显页面&#xff0c;但在我再三确认代码无误的情况下依旧无法回显内容 问题发现与解决&#xff1a; 经过排查&#xff0c;我发现我的DishDTO内容如下&#xff1a; Data public clas…

【C++】类和对象-多态

1.多态的基本语法 代码 #include <iostream> using namespace std; /******************************************/ class Animal { public://speak函数就是虚函数//函数前面加上virtual关键字&#xff0c;变成虚函数&#xff0c;//那么编译器在编译的时候就不能确定函数…

【黑马头条之kafka及异步通知文章上下架】

本笔记内容为黑马头条项目的kafka及异步通知文章上下架部分 目录 一、kafka概述 二、kafka安装配置 三、kafka入门 四、kafka高可用设计 1、集群 2、备份机制(Replication&#xff09; 五、kafka生产者详解 1、发送类型 2、参数详解 六、kafka消费者详解 1、消费者…

助力工业物联网,工业大数据之服务域:油站主题分析【二十六】

文章目录 07&#xff1a;服务域&#xff1a;油站主题分析08&#xff1a;服务域&#xff1a;油站主题实现 07&#xff1a;服务域&#xff1a;油站主题分析 目标&#xff1a;掌握油站主题的需求分析 路径 step1&#xff1a;需求step2&#xff1a;分析 实施 需求&#xff1a;统计…