用Jedis獲取redis連線(叢集和非叢集狀態下)
阿新 • • 發佈:2019-02-03
第一:非叢集狀態下
非叢集狀態下用Jedis獲取redis連線,得到Jedis物件即可,一共有兩種:
1.利用Jedis構造器,僅限用於測試,在實際專案中肯定是用JedisPool。
Jedis(String host);
Jedis(String host , int port);
2.利用JedisPool
主要是利用Jedis jedis=jedisPool.getResource();
JedisPool有N多個構造器,常用的構造器引數有GenericObjectPoolConfig poolConfig,String host,int port,int timeout,String password,建立GenericObjectPoolConfig物件時我們一般用其子類JedisPoolConfig (redis.clients.jedis.JedisPoolConfig),timeout是連線redis伺服器的超時時間,以毫秒為單位,一般設定為0,如果不設為0,則不可設定太小,如果設成1、2,那麼可能因為網路原因在1毫秒、2毫秒之內沒有連上伺服器而報錯。見下例:
如上,創建出一個JedisPool物件,然後呼叫其getResource()方法獲取redis連線即可,之後就可以呼叫Jedis API操作redis了。jedis連線用完要釋放即close,如果不close,則產生的連線會越來越多,當達到了最大連線數,再想獲得連線,就會等待,當超過了最大等待時間後就會報異常。public static void main(String[] args) { JedisPoolConfig poolConfig = new JedisPoolConfig(); // 最大連線數 poolConfig.setMaxTotal(2); // 最大空閒數 poolConfig.setMaxIdle(2); // 最大允許等待時間,如果超過這個時間還未獲取到連線,則會報JedisException異常: // Could not get a resource from the pool poolConfig.setMaxWaitMillis(1000); JedisPool pool = new JedisPool(poolConfig, "192.168.83.128", 6379, 0, "123"); Jedis jedis = null; try { for (int i = 0; i < 5; i++) { jedis = pool.getResource(); jedis.set("foo" + i, "bar" + i); System.out.println("第" + (i + 1) + "個連線, 得到的值為" + jedis.get("foo" + i)); // 用完一定要釋放連線 jedis.close(); } } finally { pool.close(); } }
第二:叢集狀態下
叢集狀態下用Jedis獲取redis連線,是得到JedisCluster物件,之後對redis進行操作都是用此物件的方法進行的:
public static void main(String[] args) { JedisPoolConfig poolConfig = new JedisPoolConfig(); // 最大連線數 poolConfig.setMaxTotal(1); // 最大空閒數 poolConfig.setMaxIdle(1); // 最大允許等待時間,如果超過這個時間還未獲取到連線,則會報JedisException異常: // Could not get a resource from the pool poolConfig.setMaxWaitMillis(1000); Set<HostAndPort> nodes = new LinkedHashSet<HostAndPort>(); nodes.add(new HostAndPort("192.168.83.128", 6379)); nodes.add(new HostAndPort("192.168.83.128", 6380)); nodes.add(new HostAndPort("192.168.83.128", 6381)); nodes.add(new HostAndPort("192.168.83.128", 6382)); nodes.add(new HostAndPort("192.168.83.128", 6383)); nodes.add(new HostAndPort("192.168.83.128", 6384)); JedisCluster cluster = new JedisCluster(nodes, poolConfig); String name = cluster.get("name"); System.out.println(name); cluster.set("age", "18"); System.out.println(cluster.get("age")); try { cluster.close(); } catch (IOException e) { e.printStackTrace(); } }
用叢集時,好像沒有辦法設定叢集的引數,比如最大連線數,雖然在建立JedisCluster 物件時傳了JedisPoolConfig物件進去,但是JedisPoolConfig物件中的設定是不生效的。