Redis sentinel cluster construction and Jedis test graphic tutorial [2], redisjedis

Source: Internet
Author: User
Tags redis server

Redis sentinel cluster construction and Jedis test graphic tutorial [2], redisjedis

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.

I only use two machines here for testing, one for Redis-Sentinel and all Redis master-slave, and the other for java testing.

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:

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.