1. 程式人生 > >Jedis連接redis

Jedis連接redis

切換 主機 jedis span slave sse list after leader

今天與大家分享下,Jedis連接池使用。先看一段JAVA 代碼:

        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxIdle(100);

        JedisPool pool = new JedisPool(config, "ip地址", 6379);
        return pool.getResource();

這段代碼是最簡單連接redis的連接池代碼,單機連接,存在單點故障。不過也看這個IP是否是VIP, redis可以做成HA模式。架構如下圖:

技術分享

redis 兩臺服務器,通過專業的HA軟件實現主從管理,對外通過VIP提供服務,但主機宕機,HA會切換到從機運行,同時改變從機的角色為: master.。 這種架構不適合做讀寫分離,只有一臺機器ONLINE 狀態。

Redis 分片架構,先看圖。典型的分片架構如下圖:

技術分享

該架構適合做並發較高,訪問量大,如果采用jedis連接,可以實現Hash 一致性數據分布。具體代碼如下:

		JedisPoolConfig config = new JedisPoolConfig();

		List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
		shards.add(new JedisShardInfo("10.20.15.236", 6379));
		shards.add(new JedisShardInfo("10.20.15.236", 6380));
		
		// 構造池
		ShardedJedisPool shardedJedisPool = new ShardedJedisPool(config, shards);
		ShardedJedis shardedJedis = shardedJedisPool.getResource();

Redis 哨兵機制

Redis本身提供一種HA方式,直接上圖:

技術分享

在服務器上啟動多個哨兵進程,通過哨兵進程監控MASTER節點,當master節點宕機 , Sentinel 進程就會切換到從機。

Sentinel 進程的配置文件如下:

bind 10.20.15.236
port 7000

dir "/var/work/redis/tmp"

sentinel myid 466427b54fe410637a35b60ee3fbf995411b71da
sentinel monitor mymaster 10.20.15.241 6379 1
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 150
# Generated by CONFIG REWRITE
sentinel config-epoch mymaster 6
sentinel leader-epoch mymaster 6
sentinel known-slave mymaster 10.20.15.236 6379
sentinel current-epoch 6

配置文件在這就不細說了。

Jedis 如何使用:

        Set<String> sentinels = new HashSet<String>();
        sentinels.add("10.20.15.236:7000");
        sentinels.add("10.20.15.241:7000");
        JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinels);

註意,該代碼的IP地址是Sentinel 進展的IP和端口號。

Jedis連接redis