当前位置: 首页 > 知识库问答 >
问题:

Redis抛出关于“读取超时”的例外

滕胜涝
2023-03-14

我是redis的新用户,我启动了服务器,了解这个教程。这很有效。然后我用java编写连接redis的代码,这样就可以了:

      Jedis jedis = new Jedis("localhost");
      System.out.println("Connecthtml" target="_blank">ion to server sucessfully");
      //store data in redis list
      jedis.lpush("tutorial-list", "Redis");
      jedis.lpush("tutorial-list", "Mongodb");
      jedis.lpush("tutorial-list", "Mysql");

但是,当我使用多线程推送redis时,它会抛出异常“读取超时”:

线程“main”java中出现异常。朗,反思一下。对太阳的攻击。反映NativeMethodAccessorImpl。在sun上调用0(本机方法)。反映NativeMethodAccessorImpl。在sun上调用(NativeMethodAccessorImpl.java:57)。反映DelegatingMethodAccessorImpl。在java上调用(DelegatingMethodAccessorImpl.java:43)。朗,反思一下。方法在org上调用(Method.java:601)。日食jdt。内部的jarinjarloader。装罐机。main(jarsrcloader.java:58)由:redis引起。客户。绝地武士。例外。JedisConnectionException:java。网SocketTimeoutException:读取在redis上超时。客户。util。重新输入流。在redis上安装(RedInputStream.java:201)。客户。util。重新输入流。redis上的readByte(redInputStream.java:40)。客户。绝地武士。协议redis上的进程(Protocol.java:141)。客户。绝地武士。协议在redis阅读(Protocol.java:205)。客户。绝地武士。联系redis上的ReadProtocolWithCheckingBreak(Connection.java:297)。客户。绝地武士。联系redis上的getBinaryMultiBulkReply(Connection.java:233)。客户。绝地武士。绝地武士。keys(Jedis.java:185)在org。v11。redis_mongo_任务。UpdateApp。jobDetail(UpdateApp.java:23)位于org。v11。redis_mongo_任务。UpdateApp。main(UpdateApp.java:42)。。。还有5个原因:java。网SocketTimeoutException:读取在java上超时。网SocketInputStream。java上的socketRead0(本机方法)。网SocketInputStream。在java上阅读(SocketInputStream.java:150)。网SocketInputStream。在java上阅读(SocketInputStream.java:121)。网SocketInputStream。在redis上阅读(SocketInputStream.java:107)。客户。util。重新输入流。EnsureRefill(redInputStream.java:195)。。。还有13个

redis怎么了?为什么它可以在单线程中工作?

共有1个答案

齐威
2023-03-14

根据这个答案,一个绝地实例是不安全的。您必须使用JedisPool进行多线程处理。你可以在这里阅读如何使用它,在这里设置最大连接数,以及如果这些连接都被占用会发生什么。

我之所以发布这些链接,是因为其中两个是如此重要,他们应该得到信用,一个是来自github官方回购,所以如果任何内容得到更新,也应该反映在这里。

 类似资料:
  • 我已经研究这个话题几天了,但是我在网上找到的答案都没有对我有用。 上下文:我有一个Spring Boot Web应用程序,它使用JavaMail API和Spring Boot Starter Mail发送自动电子邮件通知。 它使用谷歌办公套件帐户的GMail SMTP服务器。我最近升级到使用Spring 5.0.6和Spring Boot 2.0.2,电子邮件发送停止工作。 一些线索: 发送电子

  • 我返回了一个代码,使用jsoup-1.7.3.jar读取网页,它对一些网站有效,但对一些URL显示读取超时错误。 线程“main”java.net.SocketTimeoutException中的异常:java.net.SocketInputStream.socketRead0(本机方法)处java.net.SocketInputStream.Read(SocketInputStream.java

  • 我需要知道如何读取(同步或异步不重要)与超时。我想检查一个设备是否与串行端口连接。 为此,我使用,然后等待设备的响应。 如果连接了设备工作正常,但如果没有设备,程序就会停止,这就是我需要超时的原因

  • 问题内容: 这是一个基于客户端/服务器的简单ping / pong程序。不幸的是,IT无法正常工作并显示以下错误消息: 它停止在CLIENT TASK 30行,实际上,客户端不读取服务器已发送的内容。这里的代码: 服务器 服务器任务 客户 客户任务 问题答案: 问题出在循环内部的使用与从连接另一端处理套接字的方式之间的交互。 仅当从其读取的流结束时才返回-1,这在本质上将意味着套接字已关闭。在关闭

  • 我在服务器上托管了一个spring应用程序(Tomcat 8.5)。如果没有人使用它,它就会闲置。我已经知道,如果数据库处于空闲状态8小时(MySQL的默认超时),就会发生超时。正如在Spring Autoreconnect and Connection lost过夜帖子中提到的,我已经尝试了这里提供的解决方案。我尝试过配置应用程序。但这并不能解决问题。 (PS:除了Spring应用程序中的app

  • 这个问题发生在我通过Spring boot 2.0.0使用Spring webflux的项目上。M3.以下是项目的依存关系, 我有一个REST API,代码如下: 代码工作正常。使用Postman调用API时,它会返回正确的结果。 我有如下集成测试代码: 但是测试失败抛出错误消息,如下所示: 关于如何解决这个问题有什么建议吗?