2013-10-15 43 views

回答

17

好的,這裏是解決方案!

這很容易,我有點尷尬,但真正的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> 
+1

如何將此用於RedisTemplate? – pavan

+0

您可以使用RedisTemplate作爲本文共享的示例 –

+0

有人可以解釋爲什麼JedisSentinelPool.getResource()不返回JedisSentinel,而是返回Jedis? –

1

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

除了put和get之外,我怎樣才能應用不同的Redis操作? – Veswanth

+1

@VeswanthRaju下面是Redis命令如何映射到Redisson對象的文檔https://github.com/redisson/redisson/wiki/11.-Redis-commands-mapping –

1

,當你不使用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 Sentinels上的This blog post