不能获取Redis连接池实例

Could not get a resource from the pool

意思就是不能获取Redis连接池实例

redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
at redis.clients.util.Pool.getResource(Pool.java:53)
at redis.clients.jedis.JedisPool.getResource(JedisPool.java:226)
at com.atguigu.bigdata.sparkmall.common.RedisUtil$.getJedisClient(RedisUtil.scala:26)
at com.atguigu.bigdata.sparkmall.realtime.Req7TimeAdvertClickTrendApplication$$anonfun$main$1$$anonfun$apply$2.apply(Req7TimeAdvertClickTrendApplication.scala:54)
at com.atguigu.bigdata.sparkmall.realtime.Req7TimeAdvertClickTrendApplication$$anonfun$main$1$$anonfun$apply$2.apply(Req7TimeAdvertClickTrendApplication.scala:53)
at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$29.apply(RDD.scala:926)
at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$29.apply(RDD.scala:926)
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1951)
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1951)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)
at org.apache.spark.scheduler.Task.run(Task.scala:99)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:322)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused: connect
at redis.clients.jedis.Connection.connect(Connection.java:207)
at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:93)


查看是否是linux防火墙未开通访问权限:

首先公司需要申请的权限有两个:

分别是redis实例地址和哨兵。那么可以:

ping ip
telnet ip port
1
2
看这两个是否都通。

在项目中就是因为没有申请权限导致。

redis的实例名称和哨兵地址不对

这个是因为地址写错导致的。

每次使用后没有关闭连接

代码中没有finally中关闭连接池,导致连接池一直被占用,别的不能正常使用。

连接的太多,导致连接不上

连接数太多导致连接问题

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/688091
  • 你也可以参考下这篇文章:解决redis远程连接不上的问题
  • 除此之外, 这篇博客: 你不知道的Redis数据结构中的 Redis数据结构 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • Redis作为缓存利器,不论是在工作中还是面试中都是需要对其足够了解,那么请你说出Redis的数据结构,你是否了解呢?相信一定有人脱口而出,String、List、Hash、Set、Sorted Set,这里一定一定要注意,问题指的是数据结构而不是数据类型,数据结构是数据类型的底层实现,应该为简单动态字符串、双向链表、压缩列表、哈希表、跳表、整型数组,数据类型和数据结构的关系如下。

    图片

    了解完这些,我们就知道了Redis键值中的值保存形式,那么Redis的整体结构应该是什么样子呢