Jedis連接redis
阿新 • • 發佈:2017-05-14
切換 主機 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