Redis中sentinel叢集的搭建和Jedis測試 圖文教程[二],redisjedis

來源:互聯網
上載者:User

Redis中sentinel叢集的搭建和Jedis測試 圖文教程[二],redisjedis

在Redis中sentinel叢集的搭建和Jedis測試 圖文教程[一] 中已經寫了Redis中sentinel叢集的搭建和測試,這一章主要寫Redis中sentinel的Jedis測試。

一般sentinel架構圖為至少4台機子測試

我這裡測試的時候只用兩台機子,一台跑Redis-Sentinel和所有的Redis master-slave,一台跑java測試程式。

xserver.ini為項目工程的設定檔

[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為Redis操作封裝類

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為測試main函數

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"));    }}

初始運行RedisTest.java檔案,會發現如下問題

因為我是用兩台機子測試的,一台跑redis伺服器,伺服器的ip為192.168.0.86。一台跑測試java程式,測試程式所在機子的ip為192.168.0.83。兩台機子在一個區域網路段。

但是我之前sentinel配置master-slave的時候有的ip設為127.0.0.1,當然192.168.0.83上的測試程式無法串連127.0.0.1的伺服器從而無法擷取資源。

把sentinel配置中的ip全部改為192.168.0.86

運行程式結果如下:

相關文章

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.