使用 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 ,導入 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();
}

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

}

Contact

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

關注公衆號-搜雲庫

相關文章
相關標籤/搜索