使用 Jedis 鏈接操做 Redis

Redis 簡介

Redis 是徹底開源免費的,遵照BSD協議,是一個高性能的key-value數據庫。java

Redis 與其餘 key - value 緩存產品有如下三個特色: Redis支持數據的持久化,能夠將內存中的數據保持在磁盤中,重啓的時候能夠再次加載進行使用。 Redis不單單支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。 Redis支持數據的備份,即master-slave模式的數據備份。node

Redis 優點

性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。 豐富的數據類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操做。 原子 – Redis的全部操做都是原子性的,同時Redis還支持對幾個操做全並後的原子性執行。 豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過時等等特性。git

Redis與其餘key-value存儲有什麼不一樣?

Redis有着更爲複雜的數據結構而且提供對他們的原子性操做,這是一個不一樣於其餘數據庫的進化路徑。Redis的數據類型都是基於基本數據結構的同時對程序員透明,無需進行額外的抽象。 Redis運行在內存中可是能夠持久化到磁盤,因此在對不一樣數據集進行高速讀寫時須要權衡內存,應爲數據量不能大於硬件內存。在內存數據庫方面的另外一個優勢是, 相比在磁盤上相同的複雜的數據結構,在內存中操做起來很是簡單,這樣Redis能夠作不少內部複雜性很強的事情。 同時,在磁盤格式方面他們是緊湊的以追加的方式產生的,由於他們並不須要進行隨機訪問。程序員

準備

環境安裝

任選其一github

CentOs7.3 搭建 Redis-4.0.1 單機服務redis

CentOs7.3 搭建 Redis-4.0.1 Cluster 集羣服務數據庫

測試用例

Github 代碼

代碼我已放到 Github ,CacheUtils.java 點擊預覽 CacheUtils.java segmentfault

添加依賴

在項目中添加 jedis 依賴緩存

<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
	<version>2.9.0</version>
</dependency>
複製代碼

獲取集羣鏈接

private static JedisCluster jedisCluster = null;

static {
	JedisPoolConfig config = new JedisPoolConfig();

	//最大鏈接數, 默認8個
	config.setMaxTotal(1000);

	//大空閒鏈接數, 默認8個
	config.setMaxIdle(10);

	//獲取鏈接時的最大等待毫秒數(若是設置爲阻塞時BlockWhenExhausted),若是超時就拋異常, 小於零:阻塞不肯定的時間, 默認-1
	config.setMaxWaitMillis(3000);

	//--------如下配置默認就能夠-----------

	//最小空閒鏈接數, 默認0
	config.setMinIdle(0);

	//是否啓用pool的jmx管理功能, 默認true
	config.setJmxEnabled(true);

	//是否啓用後進先出, 默認true
	config.setLifo(true);

	//在獲取鏈接的時候檢查有效性, 默認false
	config.setTestOnBorrow(false);

	//在空閒時檢查有效性, 默認false
	config.setTestWhileIdle(false);

	Set<HostAndPort> hps = new HashSet<HostAndPort>();

	String redisClusterIp = "10.4.89.161:6379";
	String[] ip = redisClusterIp.split(":");
	int port = Integer.valueOf(ip[1]);
	hps.add(new HostAndPort(ip[0], port));

	jedisCluster = new JedisCluster(hps, config);

	LOG.info("JedisPoolConfig:{}", JSONObject.toJSONString(config));

	Map<String, JedisPool> nodes = jedisCluster.getClusterNodes();

	LOG.info("Get the redis thread pool:{}", nodes.toString());
}
複製代碼

獲取單實例鏈接

private static Jedis jedis = null;

static {

	JedisPoolConfig config = new JedisPoolConfig();

	//最大鏈接數, 默認8個
	config.setMaxTotal(1000);

	//大空閒鏈接數, 默認8個
	config.setMaxIdle(10);

	//獲取鏈接時的最大等待毫秒數(若是設置爲阻塞時BlockWhenExhausted),若是超時就拋異常, 小於零:阻塞不肯定的時間, 默認-1
	config.setMaxWaitMillis(3000);

	//--------如下配置默認就能夠-----------

	//最小空閒鏈接數, 默認0
	config.setMinIdle(0);

	//是否啓用pool的jmx管理功能, 默認true
	config.setJmxEnabled(true);

	//是否啓用後進先出, 默認true
	config.setLifo(true);

	//在獲取鏈接的時候檢查有效性, 默認false
	config.setTestOnBorrow(false);

	//在空閒時檢查有效性, 默認false
	config.setTestWhileIdle(false);

	JedisPool pool = new JedisPool(config, "127.0.0.1", 6379);

	LOG.info("JedisPoolConfig:{}", JSONObject.toJSONString(config));

	jedis = pool.getResource();
}
複製代碼

Redis 工具類

請查看源碼數據結構

代碼我已放到 Github ,導入 ymq-redis 項目

github github.com/souyunku/ym…

package io.ymq.redis.jedis.utils.CacheUtils;
複製代碼

單元測試

/** * java JedisCluster 操做 redis 集羣 */
@Test
public void clusterTest() {

	JedisClusterUtils.saveString("cluster-key", "www.ymq.io");

	System.out.println(JedisClusterUtils.getString("cluster-key"));

}

/** * java Jedis 操做 redis 單實例 */
@Test
public void sentineTest() {

	JedisSentinelUtils.saveString("sentine-key", "www.ymq.io");

	System.out.println(JedisSentinelUtils.getString("sentine-key"));

}

/** * cacheUtils 操做 redis 集羣 */
@Test
public void cacheUtilsTest() {

	CacheUtils.saveString("cluster-key", "www.ymq.io");

	System.out.println(CacheUtils.getString("cluster-key"));

}
複製代碼

Contact

  • 做者:鵬磊
  • 出處:www.ymq.io
  • Email:admin@souyunku.com
  • 版權歸做者全部,轉載請註明出處
  • Wechat:關注公衆號,搜雲庫,專一於開發技術的研究與知識分享

關注公衆號-搜雲庫
搜雲庫
相關文章
相關標籤/搜索