2013-10-15 9 views

Antwort

17

Ok, hier ist die Lösung!

Es ist ziemlich einfach, und ich bin ein wenig peinlich, aber wirklich die Jedis-Bibliothek ist eine tolle Lösung mit schlechter Dokumentation.

So

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

Als ich Frühling verwende, müssen Sie:

<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> 
+1

Wie verwendet man das für RedisTemplate? – pavan

+0

Sie können RedisTemplate als das Beispiel verwenden, das ich für diesen Beitrag freigegeben habe –

+0

Kann jemand erklären, warum JedisSentinelPool.getResource() JedisSentinel nicht zurückgibt, aber Jedis zurück gibt? –

1

Haben Sie Redisson versucht? Es bietet Sentinel automatische Master/Slave/Sentinel-Erkennung und Topologie-Update und Sie müssen nicht mit Verbindungen, Datencodierung umgehen ... alles von Redisson getan. Hier ist der Code Beispiel:

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()); 
+0

Wie kann ich verschiedene Redis-Operationen mit Radisson anwenden, abgesehen von Put and Get? – Veswanth

+1

@VeswanthRaju Hier ist eine Dokumentation, wie der Redis-Befehl dem Redisson-Objekt zugeordnet wurde https://github.com/redisson/redisson/wiki/11.-Redis-commands-mapping –

1

Hier ist ein Beispiel, wenn Sie nicht Frühling verwenden und benötigen eine einfache Verbindung über Jedis zu einem Redis Master/Slave-Set verwaltet von Redis Sentinels

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(); 
       } 
      } 
    } 
... 
} 

Quelle: This blog post bei der Verbindung zu Redis Sentinels.