1. 程式人生 > 其它 >使用 Jedis 連線操作 Redis

使用 Jedis 連線操作 Redis

使用 Jedis 連線操作 Redis

Redis 簡介

Redis 是完全開源免費的,遵守BSD協議,是一個高效能的key-value資料庫。

Redis 與其他 key - value 快取產品有以下三個特點: Redis支援資料的持久化,可以將記憶體中的資料保持在磁碟中,重啟的時候可以再次載入進行使用。 Redis不僅僅支援簡單的key-value型別的資料,同時還提供list,set,zset,hash等資料結構的儲存。 Redis支援資料的備份,即master-slave模式的資料備份。

Redis 優勢

效能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。 豐富的資料型別 – Redis支援二進位制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 資料型別操作。 原子 – Redis的所有操作都是原子性的,同時Redis還支援對幾個操作全並後的原子性執行。 豐富的特性 – Redis還支援 publish/subscribe, 通知, key 過期等等特性。

Redis與其他key-value儲存有什麼不同?

Redis有著更為複雜的資料結構並且提供對他們的原子性操作,這是一個不同於其他資料庫的進化路徑。Redis的資料型別都是基於基本資料結構的同時對程式設計師透明,無需進行額外的抽象。 Redis執行在記憶體中但是可以持久化到磁碟,所以在對不同資料集進行高速讀寫時需要權衡記憶體,應為資料量不能大於硬體記憶體。在記憶體資料庫方面的另一個優點是, 相比在磁碟上相同的複雜的資料結構,在記憶體中操作起來非常簡單,這樣Redis可以做很多內部複雜性很強的事情。 同時,在磁碟格式方面他們是緊湊的以追加的方式產生的,因為他們並不需要進行隨機訪問。

準備

環境安裝

任選其一

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

CentOs7.3 搭建 Redis-4.0.1 Cluster 叢集服務

測試用例

Github 程式碼

程式碼我已放到 Github ,CacheUtils.java 點選預覽 CacheUtils.java

新增依賴

在專案中新增 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 https://github.com/souyunku/ymq-example/tree/master/ymq-redis

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"));

}