redis中Could not get a resource from the pool異常及解決方案
描述
這個錯誤產生的前提是這樣的,將數(shù)據存入redis(新安裝的)中,在通過連接池獲取jedis實例時,產生如下錯誤( Could not get a resource from the pool)。
分析
由于是新安裝的redis,配置文件沒有更改,低級的錯誤浪費不少時間,寫一篇文章,讓同樣犯這種錯誤的朋友別再浪費時間。
解決
更改配置文件 redis.conf 中兩處
1.將 bind 127.0.0.1 注釋掉
2.將 protected-mode 改為 no
bind 127.0.0.1 | protected-mode |
---|---|
默認情況bind=127.0.0.1只能接受本機的訪問請求不寫的情況下,無限制接受任何ip地址的訪問 | 如果開啟了protected-mode,那么在沒有設定bind ip且沒有設密碼的情況下,Redis只允許接受本機的相應 |
運行代碼
//創(chuàng)建jedis配置文件對象 val jedisPoolConfig = new JedisPoolConfig() //添加配置信息 jedisPoolConfig.setMaxTotal(100) jedisPoolConfig.setMaxIdle(20) jedisPoolConfig.setMinIdle(0) jedisPoolConfig.setBlockWhenExhausted(true) jedisPoolConfig.setMaxWaitMillis(500) jedisPoolConfig.setTestOnBorrow(true) //創(chuàng)建連接池對象 var jedisPool:JedisPool = new JedisPool(jedisPoolConfig,"linux1",6379) //獲取實例 jedisPool.getResource
報錯內容
ERROR --- [ Executor task launch worker for task 15] org.apache.spark.executor.Executor (line: 91) : Exception in task 7.0 in stage 2.0 (TID 15)
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)
at redis.clients.jedis.BinaryJedis.connect(BinaryJedis.java:1767)
at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:106)
at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:868)
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:435)
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363)
at redis.clients.util.Pool.getResource(Pool.java:49)
... 14 more
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at redis.clients.jedis.Connection.connect(Connection.java:184)
... 21 more
其他原因
1.最大鏈接數(shù)量超標,資源未回收jedis.close();//釋放資源
2.壓根redis服務沒有起 (很多人是這種)
3.可能是linux防火墻問題造成的 檢查網絡是否暢通
4.檢查IP地址或端口是否錯誤
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
redisson中RRateLimiter分布式限流器的使用
Redisson Ratelimiter是Redisson框架中的一種限流算法,用于限制對資源的訪問頻率,本文主要介紹了redisson中RRateLimiter分布式限流器的使用,感興趣的可以了解一下2024-06-06基于Redis6.2.6版本部署Redis?Cluster集群的問題
這篇文章主要介紹了基于Redis6.2.6版本部署Redis?Cluster集群,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04Springboot/Springcloud項目集成redis進行存取的過程解析
大家都知道Redis支持五種數(shù)據類型:string(字符串),hash(哈希),list(列表),set(集合),zset(sorted set:有序集合),本文重點給大家介紹Springboot/Springcloud項目集成redis進行存取的過程,需要的朋友參考下吧2021-12-12