使用 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 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"));
}