今天与大家分享下,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(); Listshards = new ArrayList (); 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.236port 7000dir "/var/work/redis/tmp"sentinel myid 466427b54fe410637a35b60ee3fbf995411b71dasentinel 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 如何使用:
Setsentinels = new HashSet (); sentinels.add("10.20.15.236:7000"); sentinels.add("10.20.15.241:7000"); JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinels);
注意,该代码的IP地址是Sentinel 进展的IP和端口号。