024_Jedis连接池
1. Jedis不是線程安全的, 故不應該在多線程環境中共用一個Jedis實例。但是, 也應該避免直接創建多個Jedis實例, 因為這種做法會導致創建過多的socket連接, 性能不高。
2. 要保證線程安全且獲得較好的性能, 可以使用JedisPool。JedisPool是一個連接池, 既可以保證線程安全, 又可以保證了較高的效率。
3. 可以聲明一個全局的JedisPool變量來保存JedisPool對象的引用, 然后在其他地方使用。要知道, JedisPool是一個線程安全的連接池。
JedisPool jedisPool = new JedisPool("127.0.0.1");4. 通過jedisPool.getResource()獲得一個Jedis實例
Jedis jedis = jedisPool.getResource();5. 用Jedis類的close方法, 將這個Jedis實例歸還給JedisPool
jedis.close();6. Jedis類的close方法
6.1.?Jedis類的close方法代碼
public void close() {if (dataSource != null) {if (client.isBroken())this.dataSource.returnBrokenResource(this);elsethis.dataSource.returnResource(this);} else {client.close();} }6.2.?可以看到, 如果是從JedisPool取得的Jedis實例(Jedis的dataSource成員不為空, 即指向一個JedisPool), 會進行相應的歸還給JedisPool的操作, 如果是單獨生成的一個Jedis實例(Jedis的dataSource成員為空), 則會直接斷開與Redis服務器的連接。
7. 例子
7.1. 新建一個名為JedisPool的Java項目, 拷入相關jar包, 并添加到build path
7.2. 代碼
package com.redis.pool;import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool;/*** Jedis連接池*/ public class UseJedisPool {public static void main(String[] args) {JedisPool jedisPool = new JedisPool("192.168.25.138");// 獲取一個客戶端實例Jedis jedis = jedisPool.getResource();jedis.auth("lyw123456");jedis.set("name", "zhangsan");System.out.println(jedis.get("name"));// 把客戶端歸還給連接池jedis.close();// 釋放連接池jedisPool.close();jedisPool.destroy();} }7.3. 運行結果
總結
以上是生活随笔為你收集整理的024_Jedis连接池的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 013_Redis的主从模式
- 下一篇: 014_Redis的哨兵模式