Sentinel cluster construction in Redis and Jedis test graphic tutorial [2]
In Redis, the establishment of sentinel clusters and the Jedis test graphic tutorial [1] have already written the setup and testing of sentinel clusters in Redis. This chapter mainly describes the sentinel Jedis test in Redis.
Generally, the sentinel architecture is composed of at least four sub-tests.
Vcyou/examples + Cgo8cD48aW1nIHNyYz0 = "http://www.2cto.com/uploadfile/Collfiles/20150617/2015061710053770.png" alt = "here write picture description" title = "\">
Xserver. ini is the configuration file of the project.
[Redis]REDIS_NUMBERS=3REDIS_SERVER_1=tcp://192.168.0.86:26379REDIS_SERVER_2=tcp://192.168.0.86:26479REDIS_SERVER_3=tcp://192.168.0.86:26579REDIS_MASTER=mymasterREDIS_PASSWORD=vhrealREDIS_TIME_OUT=5000REDIS_DATABASE=0
RedisConnector. java is the Redis operation encapsulation class.
import java.util.HashSet;import java.util.Set;import org.apache.commons.pool2.impl.GenericObjectPoolConfig;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisSentinelPool;import Albert.CfgFileReader.CfgFileReader;public class RedisConnector { static public HashSet<String> REDIS_SERVER = new HashSet<String>(); static public int REDIS_NUMBERS = 1; static public String REDIS_MASTER = "master"; static public String REDIS_PASSWORD = ""; static public int REDIS_TIME_OUT = 1000; static public int REDIS_DATABASE = 0; static public JedisSentinelPool jedisSentinelPool = null; static public Object syncObj = new Object(); static public void Start() { synchronized (syncObj) { CfgFileReader cfg = null; try { cfg = new CfgFileReader("XServer.ini"); // [Redis] REDIS_NUMBERS = cfg.getInteger("REDIS_NUMBERS", 1); REDIS_MASTER = cfg.getString("REDIS_MASTER", "master"); REDIS_PASSWORD = cfg.getString("REDIS_PASSWORD", "master"); REDIS_TIME_OUT = cfg.getInteger("REDIS_TIME_OUT", 5000); REDIS_DATABASE = cfg.getInteger("REDIS_DATABASE", 0); if (REDIS_PASSWORD.length() == 0) REDIS_PASSWORD = null; for (int i = 0; i < REDIS_NUMBERS; ++i) { String key = String.format("REDIS_SERVER_%d", i + 1); String value = cfg.getString(key, ""); value = value.replace("tcp://", ""); value = value.replace("/", ""); value = value.toString().trim(); if (value.length() > 0) { REDIS_SERVER.add(value); } } if (jedisSentinelPool != null) { jedisSentinelPool.destroy(); jedisSentinelPool = null; } System.out.println("Creating JedisSentinelPool..."); jedisSentinelPool = new JedisSentinelPool(REDIS_MASTER, REDIS_SERVER, new GenericObjectPoolConfig(), REDIS_TIME_OUT, REDIS_PASSWORD, REDIS_DATABASE); System.out.println("Create JedisSentinelPool Success"); } catch (Exception ex) { ex.printStackTrace(); } finally { if (cfg != null) { cfg.close(); cfg = null; } } } } static public boolean Set(String key, String value) { if (jedisSentinelPool == null) return false; synchronized (syncObj) { Jedis jedis = null; try { jedis = jedisSentinelPool.getResource(); if (jedis != null) { if (value == null) value = ""; jedis.set(key, value); return true; } } catch (Exception ex) { ex.printStackTrace(); jedisSentinelPool.returnBrokenResource(jedis); } finally { jedisSentinelPool.returnResource(jedis); } return false; } } static public String Get(String key, String defaultval) { if (jedisSentinelPool == null) return defaultval; synchronized (syncObj) { Jedis jedis = null; try { jedis = jedisSentinelPool.getResource(); if (jedis != null) { String value = jedis.get(key); if (value == null) value = defaultval; return value; } } catch (Exception ex) { ex.printStackTrace(); jedisSentinelPool.returnBrokenResource(jedis); } finally { jedisSentinelPool.returnResource(jedis); } return defaultval; } } static public boolean Del(String key) { if (jedisSentinelPool == null) return false; synchronized (syncObj) { Jedis jedis = null; try { jedis = jedisSentinelPool.getResource(); if (jedis != null) { jedis.del(key); return true; } } catch (Exception ex) { ex.printStackTrace(); jedisSentinelPool.returnBrokenResource(jedis); } finally { jedisSentinelPool.returnResource(jedis); } return false; } } static public boolean Auth(String key) { if (jedisSentinelPool == null) return false; synchronized (syncObj) { Jedis jedis = null; try { jedis = jedisSentinelPool.getResource(); if (jedis != null) { jedis.auth(key); return true; } } catch (Exception ex) { ex.printStackTrace(); jedisSentinelPool.returnBrokenResource(jedis); } finally { jedisSentinelPool.returnResource(jedis); } return false; } } static public Set<String> Select(String pattern) { if (jedisSentinelPool == null) return null; synchronized (syncObj) { Jedis jedis = null; try { jedis = jedisSentinelPool.getResource(); if (jedis != null) { Set<String> keys = jedis.keys(pattern); return keys; } } catch (Exception ex) { ex.printStackTrace(); jedisSentinelPool.returnBrokenResource(jedis); } finally { jedisSentinelPool.returnResource(jedis); } return null; } }}
RedisTest. java is used to test the main function.
public class RedisTest { public static void main(String[] args) { RedisConnector.Start(); RedisConnector.Set("str1", "world"); System.out.println(RedisConnector.Get("str", "default")); System.out.println(RedisConnector.Get("str1", "default")); }}
When you run the RedisTest. java file, you will find the following problems:
Because I used two sub-computers for testing. One server runs the redis server and the ip address of the server is 192.168.0.86. A java program is run, and the ip address of the machine where the program is located is 192.168.0.83. The two machines are in the same LAN segment.
However, when I used sentinel to configure master-slave, some ip addresses were set to 127.0.0.1. Of course, the test program on 192.168.0.83 could not connect to the server of 127.0.0.1 and thus could not obtain resources.
Change all ip addresses in sentinel configuration to 192.168.0.86.
The running result is as follows: