Redis 是徹底開源免費的,遵照BSD協議,是一個高性能的key-value數據庫。java
Redis 與其餘 key - value 緩存產品有如下三個特色: Redis支持數據的持久化,能夠將內存中的數據保持在磁盤中,重啓的時候能夠再次加載進行使用。 Redis不單單支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。 Redis支持數據的備份,即master-slave模式的數據備份。node
性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。 豐富的數據類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操做。 原子 – Redis的全部操做都是原子性的,同時Redis還支持對幾個操做全並後的原子性執行。 豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過時等等特性。git
Redis有着更爲複雜的數據結構而且提供對他們的原子性操做,這是一個不一樣於其餘數據庫的進化路徑。Redis的數據類型都是基於基本數據結構的同時對程序員透明,無需進行額外的抽象。 Redis運行在內存中可是能夠持久化到磁盤,因此在對不一樣數據集進行高速讀寫時須要權衡內存,應爲數據量不能大於硬件內存。在內存數據庫方面的另外一個優勢是, 相比在磁盤上相同的複雜的數據結構,在內存中操做起來很是簡單,這樣Redis能夠作不少內部複雜性很強的事情。 同時,在磁盤格式方面他們是緊湊的以追加的方式產生的,由於他們並不須要進行隨機訪問。程序員
任選其一github
CentOs7.3 搭建 Redis-4.0.1 單機服務redis
CentOs7.3 搭建 Redis-4.0.1 Cluster 集羣服務數據庫
代碼我已放到 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();
}
複製代碼
請查看源碼數據結構
代碼我已放到 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"));
}
複製代碼