Spring Data Redis JedisConnectionException:流意外结束

2024-04-27

雷迪斯3.0.5
Spring数据Redis 1.3.6
绝地武士2.6.3
- 我们的 Web 应用程序通过 pub/sub 从 Redis 接收数据。
- 还以键/值对的形式在 Redis 上执行数据读/写。
- 读/写发生在监听线程、独立监控线程和http请求线程上。
- 我们为监听器和 redis 模板使用了相同的连接工厂
- 我们的redis服务器配置了“timeout=30”

<bean id="jedisConnectionFactory"
    class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
    <property name="hostName" value="nnnn"></property>
    <property name="port" value="nnnn"></property>
    <property name="password" value="****"></property>
</bean>
<bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
    <property name="connectionFactory" ref="jedisConnectionFactory" />
</bean>
<bean id="redisContainer"
    class="org.springframework.data.redis.listener.RedisMessageListenerContainer">
    <property name="connectionFactory" ref="jedisConnectionFactory" />
    <property name="messageListeners">
        <map>
            <entry key-ref="messageListener">
                <bean class="org.springframework.data.redis.listener.ChannelTopic">
                    <constructor-arg value="topic_name" />
                </bean>
            </entry>
        </map>
    </property>
    <property name="taskExecutor" ref="redisTaskExecutor" />
    <property name="subscriptionExecutor" ref="redisSubTaskExecutor" />
</bean>
<bean id="redisTaskExecutor"
    class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
    <property name="threadNamePrefix" value="RedisListenerThread"></property>
    <property name="corePoolSize" value="1" />
    <property name="maxPoolSize" value="1" />
</bean>
<bean id="redisSubTaskExecutor"
    class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
    <property name="threadNamePrefix" value="RedisSubscribeThread"></property>
    <property name="corePoolSize" value="1" />
    <property name="maxPoolSize" value="1" />
</bean>
<bean id="messageListener"
    class="org.springframework.data.redis.listener.adapter.MessageListenerAdapter">
    <constructor-arg index="0">
        <bean class="my.data.Receiver" />
    </constructor-arg>
    <constructor-arg index="1"><value>receive</value></constructor-arg>
</bean>

在生产过程中,我们偶尔会遇到以下数据读取问题。

org.springframework.data.redis.RedisConnectionFailureException:流意外结束。;嵌套异常是 redis.clients.jedis.exceptions.JedisConnectionException:流意外结束。 在org.springframework.data.redis.connection.jedis.JedisExceptionConverter.convert(JedisExceptionConverter.java:47) 在org.springframework.data.redis.connection.jedis.JedisExceptionConverter.convert(JedisExceptionConverter.java:36) 在org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:37) 在org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:37) 在 org.springframework.data.redis.connection.jedis.JedisConnection.convertJedisAccessException(JedisConnection.java:182) 在 org.springframework.data.redis.connection.jedis.JedisConnection.get(JedisConnection.java:1087) 在 org.springframework.data.redis.connection.DefaultStringRedisConnection.get(DefaultStringRedisConnection.java:276) 在 org.springframework.data.redis.core.DefaultValueOperations$1.inRedis(DefaultValueOperations.java:46) 在 org.springframework.data.redis.core.AbstractOperations$ValueDeserializingRedisCallback.doInRedis(AbstractOperations.java:50) 在 org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:190) 在 org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:152) 在 org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:84) 在 org.springframework.data.redis.core.DefaultValueOperations.get(DefaultValueOperations.java:43)

我读过其他线程谈论使用单线程进行读/写。但在我们的例子中很难使用单线程。另外,根据 RedisTemplate 文档,它是线程安全的。 该问题是偶尔出现的,我们无法在任何开发/测试/uat 环境中重现。因此无法找到相同的确切原因。 我们做错了什么?


我们已经能够重现该问题,原因是 Redis 中的“timeout=30”设置。

Scenario

  1. 连接空闲 30 秒,Redis 将其终止。
  2. 在应用程序中的“Redis 连接工厂”检测到损坏之前 连接,它获得读或写请求的分配
  3. 代码 尝试使用此连接,但由于它已损坏,因此无法 发送读/写命令。因此我们得到“JedisConnectionException: 流意外结束”异常

Solution

  1. 将 Redis 超时设置为零
  2. 使用自定义 JedisPoolConfig 集 minEvictableIdleTimeMillis 为所需值。这将确保 空闲连接从Jedis连接池中释放
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Data Redis JedisConnectionException:流意外结束 的相关文章

  • 无法从 TemporalAccessor 获取 OffsetDateTime

    当我这样做时 String datum 20130419233512 DateTimeFormatter formatter DateTimeFormatter ofPattern yyyyMMddHHmmss withZone ZoneI
  • 如何检查字符串是否具有特定模式[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 用户输入任意字符串 程序会区分该字符
  • CSS 未在 Spring Boot 中加载

    我是 spring 框架工作和 spring boot 的新手 我正在尝试使用 CSS javascript js 添加静态 html 文件 文件结构是 我的 html 文件头看起来像这样
  • Selenium - 保存网站,包括所有图像、css、dom

    我想使用 firefox 或 chrome 访问带有 selenium 的页面 当页面加载时 我想从页面下载所有图像 css dom 我想存储每张图像 就像我在其中找到它们一样 chrome gt Tools gt Development
  • 黄瓜与 Micronaut

    我正在尝试将 Cucumber 与 Micronaut 一起使用 但当我尝试将其与 Cucumber 一起使用时 MicronautTest 注释根本不起作用 未注入 theApple 请参阅下面的代码 如果我在没有黄瓜的情况下运行它就可以
  • 如何使用 Spring Security 跨多个基于 JVM 的应用程序实现单点登录

    我目前正在尝试跨多个基于 JVM Grails Servlet 的 Web 应用程序实现单点登录解决方案 这些应用程序目前都部署在同一个 servlet 容器 当前是 Tomcat 但不想将我的解决方案仅限于 Tomcat 中 所有 Web
  • 将二进制数据的 byte[] 转换为 String

    我有二进制格式的数据 hex 80 3b c8 87 0a 89 我需要将其转换为字符串 以便通过 Jackcess 将二进制数据保存在 MS Access 数据库中 我知道 我不打算在 Java 中使用 String 来存储二进制数据 但
  • 从 org.w3c.dom.Node 获取 Xpath

    我可以从 org w3c dom Node 获取完整的 xpath 吗 假设当前节点指向 xml 文档中间的某个位置 我想提取该元素的 xpath 我正在寻找的输出 xpath 是 parent child1 chiild2 child3
  • 为什么 Java 中的 hashCode() 可以对不同对象返回相同的值?

    引用我正在读的书中的一段话首先Java http www amazon co uk Head First Java Kathy Sierra dp 0596009208 关键是 哈希码可以相同 但不一定保证对象相等 因为使用的 哈希算法 h
  • 如何将 currentTimeMillis 转换为可读的日期格式? [复制]

    这个问题在这里已经有答案了 我想用currentTimeMillis两次 这样我就可以计算持续时间 但我也想以用户可读的格式显示时间和日期 我遇到了麻烦currentTimeMillis有利于计算 但我看不到内置函数可以转换为合适的时间或时
  • 如何在 Ivy 中使用不同的分类器下载多个 Maven 依赖项?

    我试图依靠Neo4j 服务器 jar http repo neo4j org content repositories snapshots org neo4j app neo4j server 1 5 SNAPSHOT neo4j serv
  • 如何在 Spring Boot 中创建 Apache POI Excel 视图配置

    当我想使用 Spring Boot Web 将数据导出到 Excel 时遇到问题 我使用 Thymeleaf 作为模板引擎 由 Spring Boot 自动配置 但是当我在附加配置中添加 XmlViewResolver 时 由 XmlVie
  • 如何获取队列中的第 n 个项目?

    我的应用程序中有许多队列和优先级队列 我想轻松访问这些队列中的第 n 个项目 但没有看到使用 API 实现此目的的简单方法 我想我可以创建一个Iterator并迭代到第 n 个元素或使用toArray index 但似乎应该有一个更简单的方
  • HashSet 与 LinkedHashSet

    它们之间有什么区别 我知道 LinkedHashSet 是 HashSet 的有序版本 维护一个跨所有元素的双向链接列表 使用此类代替 HashSet 当您关心迭代顺序时 当你迭代 HashSet 时 顺序是不可预测的 而 LinkedHa
  • 有时 Properties.load() 会跳过行

    在以下情况下 Properties load 会跳过 InputStream 的第二行 这是 Java 的错误还是正常行为 public class PropTest public static void main String args
  • Spring Boot如何加入自定义查询

    我需要创建一个端点 该端点按州返回人口普查数据以及城市列表 我目前使用两个端点来获取此数据 目前回应 自定义查询一 censusByState id 1 code 11 name Rond nia statePopulation 18152
  • 为什么 HttpServletRequest 输入流为空?

    我有这段代码 我从请求输入流读取输入并使用 JacksonMapper 转换为 POJO 它在具有 guice 支持的 jetty 7 容器中运行 Override protected void doPost HttpServletRequ
  • 如何将多部分文件从另一个服务发送到一个服务

    我有两个端点 api 它们是 uploadand 重定向 upload是我直接上传文件的地方 重定向是我接收文件并将其传递给上传并获取 JSON 响应的地方 upload 所以下面是我的代码 package com example impo
  • Android应用程序中的模式输入

    我想知道是否有其他替代方案可以替代 Android 上平庸的 EditText 密码输入 是否有 API 或开源代码可以集成到我的应用程序中 类似于锁屏图案解锁 Intent 可能会返回哈希值 数字 字符串或代表用户输入的模式的任何内容 我
  • javafx中的stackpane和root有什么区别?

    我正在练习javafx做饼图 以下是开发饼图的代码 如果我这样做Group并与StackPane 我发现输出没有区别 我已经评论了组部分 只是徘徊两者之间的区别 import javafx application Application i

随机推荐

  • PrimeFaces 5.2 及更高版本中图表扩展器属性的替代方案是什么

    我正在使用 primefaces 5 2 最新版本并尝试了折线图 它工作正常 我正在尝试更改折线图轴的颜色 背景 边框等 但扩展器属性在最新的 primefaces 版本中不起作用 我的 XHTML
  • 为什么图很大时x轴消失了

    我正在尝试使用加载大图JFreeChart 但是 当缓冲图像超过一定大小时 X 轴会出现问题 这些值在 X 轴上消失 这可以在图像的第三张图中看到 I would appreciate any help in fixing the prob
  • Java 方法存根

    这就是我必须做的 为下面的 main 调用的方法定义存根 每个存根应打印 FIXME Finish methodName 后跟换行符 并应返回 1 输出示例 FIXME Finish getUserNum FIXME Finish getU
  • 来自外部 .diff 文件的交互式补丁

    Linux 是否有命令或程序允许交互式地修补源代码 在屏幕上打印每个块并在将其应用到文件之前等待确认 就像是git add p 但是从另一个 diff 文件中进行更改 您始终可以在 shell ruby python 中编写脚本 逐行读取该
  • 使用 .load() 用图像填充 div 以方便使用 slider1.7

    所以我试图用外部 html 文件中的图像填充幻灯片 div 但问题似乎是新图像确实可以通过 load 拉取 但简单的滑块无法看到新图像 甚至只显示空白尽管在 div 中 有新的图像链接 在我的 html 中 我有这个
  • 进度条摆动效果

    摆动垂直进度条 我学会了如何构建一个整洁的 动态大小的垂直进度条 其中带有横栏这个问题 https stackoverflow com questions 22337851 css vertical progress bar noredir
  • PHP:如果我以非静态方式调用静态方法怎么办?

    我不是面向对象编程专业人士 我有一个愚蠢的问题 class test public static function doSomething arg foo I ate your arg return foo 那么正确的调用方式doSomet
  • 使用 WinAPI 在 C# 中隐藏任务栏窗口

    相信我 我用谷歌搜索过它 并期望它是一个相当容易找到的东西 事实证明并非如此 我有窗把手 但没有表格 我该怎么做 谢谢 声明这些 DllImport user32 dll SetLastError true static extern in
  • LogStash 无法从许可证中检索许可证信息。响应代码“401”通过 URL“http://elasticsearch:9200/_xpack”联系 Elasticsearch

    我正在努力让 Docker LogStash 连接到 Docker ElasticSearch 并启用 xpack 安全性 主要日志有 logstash 1 2020 05 20T22 41 03 950 WARN deprecation
  • 单向绑定

    我知道这个问题存在 但我在答案中找不到解决方案 我有一个表单 其中数据绑定到自定义类 以便在更改表单时 自定义类会收到通知 相反的情况永远不会发生 myForm DataBindings Add Items ItemsController
  • 同时安装多个自制公式

    您可以通过安装多个自制程序brew install package1 package2 但是 如果您有一个文本文件 其中包含您想要安装的所有软件包 你会怎么做 brew install lt packages txt不起作用 它给了我回应
  • 节点 aws-sdk s3 文件上传大小

    当使用 Node js 的 aws sdk npm 插件时 我可以使用以下代码上传 50kb 的 pdf 到 AWS s3 var params Bucket BUCKET Key pdf key Body file ContentType
  • 如何使 React Native Android 应用程序崩溃

    我正在研究react native firebase crashlytics 我正在使用 rnfirebase 入门套件 在那里 我们将 crashlytics 与该项目集成 现在 我想让我的应用程序崩溃以检查崩溃报告 You need t
  • Rails 3.1 与 3.0 AJAX 语法差异。 jQuery 中的等效语句?

    完成 使用 Rails 进行敏捷 Web 开发 第 4 版并点击开始 AJAX 部分 第 11 章迭代 F2 在示例代码中 使用 Rails 3 0 的书籍建议创建 app views line items create js rjs 文件
  • Python——“对象布局”

    有人可以描述以下异常吗 什么是 对象布局 以及它是如何定义的 谢谢 Traceback most recent call last File test gui py line 5 in
  • 表面参数化

    我正在尝试在表面网格上获取参数化表面 从 STL 格式文件中读取 我阅读了 CGAL 示例目录提供的一些有关参数化的示例 我知道应该提供接缝线才能在任意表面上获得参数化表面 但我还是不明白如何制作接缝线 下面是我到目前为止的代码 总而言之
  • 检查 Web 服务中的 Json

    我的 json 有问题 我希望我的 Json 看起来像 data phoneId 1 token APA91bF2tN5g1TtULFE5tysRMAarygjX4w9hjTGCqT3SL PwiMV6aqTtkV3lpqLkc7msVfE
  • Google Sheets 转置具有多个值的数据

    我试图按如下方式显示示例数据 我可以使用数据透视表和多个值来完成此操作 没有任何问题 但希望找到一种使用查询或其他方法的方法 使用下面的公式部分解决了此问题 但不包括 其他 列 Index Transpose Unique Filter B
  • 为什么输出窗口无法显示结果。图像处理-线条检测

    该霍夫变换程序应该在执行时显示源图像 输出图像 带有图像的边缘检测结果窗口 但是 即使源图像和边缘检测结果 输出图像窗口也不会显示任何内容 链接https github com eToTheEcs hough transform blob
  • Spring Data Redis JedisConnectionException:流意外结束

    雷迪斯3 0 5Spring数据Redis 1 3 6绝地武士2 6 3 我们的 Web 应用程序通过 pub sub 从 Redis 接收数据 还以键 值对的形式在 Redis 上执行数据读 写 读 写发生在监听线程 独立监控线程和htt