Я ищу пример jedis, используя redis sentinel. Я не могу использовать средства jedis для дозорного, и я не мог найти хороший пример или документацию.
Ищете пример Джедай со Стражем
Ответ 1
Библиотека 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>
Ответ 2
Вот пример, когда вы не используете Spring и нуждаетесь в простом подключении через Jedis к основному/подчиненному набору Redis, управляемому 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();
}
}
}
...
}
Источник: это сообщение в блоге о подключении к Redis Sentinels.
Ответ 3
Вы пробовали 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());