分布式快取Redis之資源釋放

2021-08-13 10:27:10 字數 1858 閱讀 7981

本學習教程所有示例**見github:

比如下面一段**:

for

(int i =

2000

; i <

3000

; i++

)

在上面的**中,當迴圈到600次的時候,就會報出拿不到連線的錯誤,而600恰好是配置中的連線個數;並且jedis連線不會在使用結束後進行自動釋放(因為報錯後,再次請求這個方法,連乙個連線都拿不到了)。如果在**的迴圈中加入

jedis.

close()

;

則效果就不一樣了,可以迴圈結束,並且列印的jedis物件是同乙個連線位址。

jedis 3.0版本,使用jedis.close()方法關閉連線。close()原始碼如下:

@override

public

void

close()

else

}else

}

可以看到,如果是從jedispool取得的jedis例項(jedis的datasource成員不為空,即指向乙個jedispool),會進行相應的歸還給jedispool的操作,如果是單獨生成的乙個jedis例項(jedis的datasource成員為空),則會直接斷開與redis伺服器的連線。

不能不管什麼情況都一律使用returnresource()。

原因及案例見:

使用注意事項/

更健壯可靠以及優雅的處理方式如下所示:

while

(true

)catch

(jedi***ception e)

finally

}/**

* handle jedi***ception, write log and return whether the connection is broken.

*/protected

boolean

handlejedi***ception

(jedi***ception jedi***ception)

else

if(jedi***ception instanceof

jedisdataexception

)else

}else

return

true;}

/** * return jedis connection to the pool, call different return methods depends on the conectionbroken status.

*/protected

void

closeresource

(jedis jedis,

boolean conectionbroken)

else

}catch

(exception e)

}

------至所有正在努力奮鬥的程式猿們!加油!!

有碼走遍天下 無碼寸步難行

1024 - 夢想,永不止步!

愛程式設計 不愛bug

愛加班 不愛黑眼圈

固執 但不偏執

瘋狂 但不瘋癲

生活裡的菜鳥

工作中的大神

身懷寶藏,一心憧憬星辰大海

追求極致,目標始於高山之巔

一群懷揣好奇,夢想改變世界的孩子

一群追日逐浪,正在改變世界的極客

你們用最美的語言,詮釋著科技的力量

你們用極速的創新,引領著時代的變遷

——github:

Redis 分布式快取

1 官網 3 菜鳥教程 4 redis的集群教程 5 史上最全redis高可用技術解決方案大全 一 redis的特點?redis 本質上是乙個 key value 型別的記憶體資料庫,很像 memcached,整個 資料庫統統載入在記憶體當中進行操作,定期通過非同步操作把資料庫資料 flush 到硬...

分布式快取Redis之bitmap setbit

本學習教程所有示例 見github 1 setbit redis 127.0.0.1 6379 setbit key name offset value 該命令用於對 key 所儲存的字串值,設定或清除指定偏移量上的位 bit 時間複雜度o 1 在redis中,儲存的字串都是以二進位制的形式存在的。...

分布式快取Redis之效能測試

本學習教程所有示例 見github redis 效能測試是通過同時執行多個命令實現的。redis 效能測試的基本命令如下 redis benchmark option option value 以下例項同時執行 10000 個請求來檢測效能 redis benchmark n 100000 ping...