024_Jedis连接池
1. Jedis不是線程安全的, 故不應(yīng)該在多線程環(huán)境中共用一個(gè)Jedis實(shí)例。但是, 也應(yīng)該避免直接創(chuàng)建多個(gè)Jedis實(shí)例, 因?yàn)檫@種做法會(huì)導(dǎo)致創(chuàng)建過(guò)多的socket連接, 性能不高。
2. 要保證線程安全且獲得較好的性能, 可以使用JedisPool。JedisPool是一個(gè)連接池, 既可以保證線程安全, 又可以保證了較高的效率。
3. 可以聲明一個(gè)全局的JedisPool變量來(lái)保存JedisPool對(duì)象的引用, 然后在其他地方使用。要知道, JedisPool是一個(gè)線程安全的連接池。
JedisPool jedisPool = new JedisPool("127.0.0.1");4. 通過(guò)jedisPool.getResource()獲得一個(gè)Jedis實(shí)例
Jedis jedis = jedisPool.getResource();5. 用Jedis類(lèi)的close方法, 將這個(gè)Jedis實(shí)例歸還給JedisPool
jedis.close();6. Jedis類(lèi)的close方法
6.1.?Jedis類(lèi)的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實(shí)例(Jedis的dataSource成員不為空, 即指向一個(gè)JedisPool), 會(huì)進(jìn)行相應(yīng)的歸還給JedisPool的操作, 如果是單獨(dú)生成的一個(gè)Jedis實(shí)例(Jedis的dataSource成員為空), 則會(huì)直接斷開(kāi)與Redis服務(wù)器的連接。
7. 例子
7.1. 新建一個(gè)名為JedisPool的Java項(xiàng)目, 拷入相關(guān)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");// 獲取一個(gè)客戶(hù)端實(shí)例Jedis jedis = jedisPool.getResource();jedis.auth("lyw123456");jedis.set("name", "zhangsan");System.out.println(jedis.get("name"));// 把客戶(hù)端歸還給連接池jedis.close();// 釋放連接池jedisPool.close();jedisPool.destroy();} }7.3. 運(yùn)行結(jié)果
總結(jié)
以上是生活随笔為你收集整理的024_Jedis连接池的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 013_Redis的主从模式
- 下一篇: 025_Jedis集群