Ich suche ein Beispiel für Jedis mit dem Redis Sentinel. Ich bin nicht in der Lage, die Jedis-Einrichtungen für Sentinel zu benutzen, und ich konnte kein gutes Beispiel oder Dokumentation finden.Auf der Suche nach einem Beispiel für Jedis mit Sentinel
Antwort
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>
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());
Wie kann ich verschiedene Redis-Operationen mit Radisson anwenden, abgesehen von Put and Get? – Veswanth
@VeswanthRaju Hier ist eine Dokumentation, wie der Redis-Befehl dem Redisson-Objekt zugeordnet wurde https://github.com/redisson/redisson/wiki/11.-Redis-commands-mapping –
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.
Wie verwendet man das für RedisTemplate? – pavan
Sie können RedisTemplate als das Beispiel verwenden, das ich für diesen Beitrag freigegeben habe –
Kann jemand erklären, warum JedisSentinelPool.getResource() JedisSentinel nicht zurückgibt, aber Jedis zurück gibt? –