web-dev-qa-db-ja.com

センチネルとジェダイの例を探しています

Redisセンチネルを使用したジェダイの例を探しています。センチネルのジェダイ機能を使用できず、良い例やドキュメントが見つかりませんでした。

15

Jedisライブラリは素晴らしいソリューションですが、残念ながらドキュメントが不適切です。

そう、

@Autowired private JedisSentinelPool pool;

public void mymethod() {
    Jedis jedis = null;
    try {
        jedis = pool.getResource();
        jedis.hset(....
    } catch (JedisException je) {
        throw je;
    } finally {
        if (jedis != null) pool.returnResource(jedis);
    }
}

Springを使用しているので、次のものが必要です。

<bean id="redisSentinel" class="redis.clients.jedis.JedisSentinelPool">
<constructor-arg index="0" value="mymaster" />
<constructor-arg index="1">
     <set>  
         <value>hostofsentinel:26379</value>  
    </set> 
</constructor-arg>
<constructor-arg index="2" ref="jedisPoolConfig"/>
</bean>
19

Springを使用しておらず、Jedisを介してRedisセンチネルが管理するRedisマスター/スレーブセットに簡単に接続する必要がある場合の例を次に示します。

public class JedisTestSentinelEndpoint {
    private static final String MASTER_NAME = "mymaster";
    public static final String PASSWORD = "foobared";
    private static final Set sentinels;
    static {
        sentinels = new HashSet();
        sentinels.add("mymaster-0.servers.example.com:26379");
        sentinels.add("mymaster-1.servers.example.com:26379");
        sentinels.add("mymaster-2.servers.example.com:26379");
    }

    public JedisTestSentinelEndpoint() {
    }

    private void runTest() throws InterruptedException {
        JedisSentinelPool pool = new JedisSentinelPool(MASTER_NAME, sentinels);
        Jedis jedis = null;
            try {
                printer("Fetching connection from pool");
                jedis = pool.getResource();
                printer("Authenticating...");
                jedis.auth(PASSWORD);
                printer("auth complete...");
                Socket socket = jedis.getClient().getSocket();
                printer("Connected to " + socket.getRemoteSocketAddress());
                printer("Writing...");
                jedis.set("Java-key-999", "Java-value-999");
                printer("Reading...");
                jedis.get("Java-key-999");
            } catch (JedisException e) {
                printer("Connection error of some sort!");
                printer(e.getMessage());
                Thread.sleep(2 * 1000);
            } finally {
                if (jedis != null) {
                    jedis.close();
                }
            }
    }
...
}

出典: このブログ投稿 Redisセンチネルへの接続について。

4
Vaibhaw

試しましたか Redisson ?センチネルの自動マスター/スレーブ/センチネル検出とトポロジー更新を提供し、接続やデータエンコーディングを処理する必要はありません...すべてRedissonによって行われます。コード例は次のとおりです。

Config config = new Config();
config.useSentinelServers()
   .setMasterName("mymaster")
   .addSentinelAddress("127.0.0.1:26389", "127.0.0.1:26379")

RedissonClient redisson = Redisson.create(config);

RMap<MyKey, MyValue> map = redisson.getMap("myMap");
map.put(new MyKey(), new MyValue());
1