2013-10-15 8 views
13

के साथ जेडिस का एक उदाहरण खोज रहे हैं मैं रेडिस सेंटीनेल का उपयोग कर जेडिस का एक उदाहरण ढूंढ रहा हूं। मैं सेंटीनेल के लिए जेडीआईएस सुविधाओं का उपयोग करने में सक्षम नहीं हूं, और मुझे कोई अच्छा उदाहरण या दस्तावेज नहीं मिला।सेंटीनेल

उत्तर

17

ठीक है, यह समाधान है!

यह बहुत आसान है, और मैं थोड़ा शर्मिंदा हूं, लेकिन वास्तव में जेडिस लाइब्रेरी खराब दस्तावेज़ीकरण के साथ एक शानदार समाधान है।

तो,

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

जैसा कि मैंने वसंत का उपयोग कर रहा है, तो आप की जरूरत है:

<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

क्या कोई यह समझा सकता है कि जेडिस सैंटिनेलपूल.getResource() जेडिस सैंटिनल क्यों नहीं लौटाता है बल्कि इसके बजाय जेडिस लौटाता है? –

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

रैडिसन का उपयोग करके अलग-अलग रेडिस ऑपरेशंस कैसे लगाया जा सकता है, इसके अलावा और प्राप्त करने के अलावा? – Veswanth

+1

@VeswanthRaju यहां एक प्रलेखन है कि कैसे Redis कमांड Redisson ऑब्जेक्ट मैप किया गया https://github.com/redisson/redisson/wiki/11.-Redis-commands- मैपिंग –

1

यहाँ एक उदाहरण है जब आप स्प्रिंग उपयोग नहीं कर रहे हैं और एक Redis मास्टर/दास Redis द्वारा प्रबंधित सेट करने के लिए Jedis के माध्यम से एक सरल कनेक्शन की आवश्यकता प्रहरी

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

स्रोत है: यहाँ कोड उदाहरण है: रेडिस सेंटीनेल से जुड़ने पर This blog post

संबंधित मुद्दे