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 ,導入 ymq-redis 項目 segmentfault
github https://github.com/souyunku/ymq-example/tree/master/ymq-redis緩存
在項目中添加 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 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")); }