Java中的Redis 哨兵高可用性

让我们探索Redis Sentinel,看看如何在Java上运行它,一起来看看,最近get了很多新知识,分享给大家参考学习。需要详细的java架构思维导图路线也可以评论获取!

什么是Redis哨兵

在优锐课的java分享中讨论了,可用性是任何企业数据库中最重要的质量之一。用户必须保证他们可以访问所需的信息和见解,从而在工作中表现出色。

但是,确保数据库在需要时可用是一件容易的事,而做起来却容易。术语“高可用性”是指可以连续运行而不会出现故障的系统,该系统的时间长度比平均时间长。

Redis Sentinel是Redis的高可用性解决方案,Redis是一种开源的内存中数据结构存储,可用作非关系键值数据库。 Redis Sentinel的目标是通过三种不同的功能来管理Redis实例:监视你的Redis部署,在出现问题时发送通知,以及通过创建新的主节点自动处理故障转移过程。

作为分布式系统,Redis Sentinel旨在与其他Sentinel进程一起运行。这减少了在检测到主节点发生故障时出现误报的可能性,并且还为系统接种了任何单个进程的故障。

Redis Sentinel的创建者建议你至少有三个Sentinel实例,以便进行可靠的Sentinel部署。这些实例应分布在可能彼此独立故障的计算机之间,例如位于不同地理区域的计算机

如何运行Redis 哨兵

运行Redis Sentinel将需要以下两个可执行文件之一:redis-sentinel或redis-server。

使用redis-sentinel可执行文件,你可以使用以下命令运行Redis Sentinel:

1 redis-sentinel /path/to/sentinel.conf

其中“ /path/to/sentinel.conf”是Sentinel配置文件的路径。

借助redis-server可执行文件,你可以使用以下命令运行Redis Sentinel:

1 redis-server /path/to/sentinel.conf --sentinel

请注意,在两种情况下,都必须提供指向Sentinel配置文件的链接。 运行Redis Sentinel时需要使用配置文件,以便在系统重新启动时保存系统的当前状态。

Redis Sentinel配置文件示例如下所示:

 1 sentinel monitor mymaster 127.0.0.1 6379 2
 2
 3 sentinel down-after-milliseconds mymaster 60000
 4
 5 sentinel failover-timeout mymaster 180000
 6
 7 sentinel parallel-syncs mymaster 1
 8
 9 sentinel monitor resque 192.168.1.3 6380 4
10
11 sentinel down-after-milliseconds resque 10000
12
13 sentinel failover-timeout resque 180000
14
15 sentinel parallel-syncs resque 5

在此示例中,行``Sentinel Monitor <主组名称> <ip> <端口> <仲裁>‘‘在给定的IP地址和端口号上定义了一个名为master-group-name的Sentinel主节点。 法定参数是必须就主节点不可访问这一事实达成共识的Sentinel进程数。

其他行定义以下设置:

“毫秒后下降”:定义将主节点视为不可达之后经过的毫秒数。

“ Sentinel故障转移超时”:定义Sentinel进程将尝试投票主节点的故障转移的时间。

“ sentinel parallel-syncs”:定义可以在故障转移后同时重新配置为使用同一主节点的从节点的数量。

在Java上连接到Redis Sentinel

对于Java程序员而言,坏消息是Redis Sentinel与Java兼容。 但是,好消息是Redis Sentinel和Java可以使用诸如Redisson的框架轻松地协同工作,Redisson是Redis的Java客户端,它使用许多熟悉的Java编程语言构造。 Redisson提供了数十种以分布式方式实现的Java对象,集合,锁和服务,从而允许用户在不同的应用程序和服务器之间共享它们。

以下代码示例演示了如何在Java中开始使用Redis Sentinel。 设置配置文件和Redisson客户端后,该应用程序执行一些基本操作以演示将Redis与Java一起使用的可行性。

 1 package redis.demo;
 2
 3 import org.redisson.Redisson;
 4
 5 import org.redisson.api.RBucket;
 6
 7 import org.redisson.api.RedissonClient;
 8
 9 /**
10
11  * Redis Sentinel Java example
12
13  *
14
15  */
16
17 public class Application
18
19 {
20
21     public static void main( String[] args )
22
23     {
24
25         Config config = new Config();
26
27         config.useSentinelServers()
28
29               .addSentinelAddress("redis://127.0.0.1:6379")
30
31               .setMasterName("myMaster");
32
33         RedissonClient redisson = Redisson.create(config);
34
35         // perform operations
36
37         // implements java.util.concurrent.ConcurrentMap
38
39         RMap<String, String> map = redisson.getMap("simpleMap");
40
41         map.put("mapKey", "This is a map value");
42
43         String mapValue = map.get("mapKey");
44
45         System.out.println("stored map value: " + mapValue);
46
47         // implements java.util.concurrent.locks.Lock
48
49         RLock lock = redisson.getLock("simpleLock");
50
51         lock.lock();
52
53         try {
54
55            // do some actions
56
57         } finally {
58
59            lock.unlock();
60
61         }
62
63         redisson.shutdown();
64
65     }
66
67 }

总结

请务必注意,Redisson用户必须指定至少一台Redis Sentinel服务器和至少一台Redis主节点。 启动后,Redisson继续监视Redis Sentinel中可用的主节点和从节点以及Sentinel节点的列表。 这意味着用户无需监视Redis拓扑的状态即可处理故障转移情况; Redisson独自完成了此任务。

原文地址:https://www.cnblogs.com/youruike1/p/12118431.html

时间: 2024-09-28 09:20:07

Java中的Redis 哨兵高可用性的相关文章

在java中使用redis

在java中使用redis很简单,只需要添加jedist.jar,通过它的api就可以了.而且,api和redis的语法几乎完全相同.以下简单的测试: 参考:http://www.runoob.com/redis/redis-java.html 1 package com.test.redis; 2 3 import org.junit.Test; 4 import redis.clients.jedis.Jedis; 5 6 import java.util.HashMap; 7 import

java中操作redis

1 package com.redis; 2 3 import java.io.IOException; 4 import java.util.concurrent.ConcurrentHashMap; 5 6 import redis.clients.jedis.Jedis; 7 import redis.clients.jedis.Transaction; 8 /** 9 * java中操作redis 10 * 11 * @author Administrator 12 * 13 */ 14

Java中使用redis添加依赖

1.首先在Java的maven文件中加入依赖:注意:在添加clientde 依赖时,我用的2.1.0和2.6.0版本都报错,最后转成了2.9.0版本可以正常使用了 2.<!-- Java 中使用redis的pom依赖 --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</vers

Java中使用Redis

学习资料: redis学习及实践3---Jedis.JedisPool.Jedis分布式实例介绍 redis 工具类 单个redis.JedisPool 及多个redis.shardedJedisPool与spring的集成配置 Java中使用Jedis操作Redis ShardedJedisPool的使用 Codis作者黄东旭细说分布式Redis架构设计和踩过的那些坑

Redis(2)用jedis实现在java中使用redis

昨天已经在windows环境下安装使用了redis. 下面准备在java项目中测试使用redis. redis官网推荐使用jedis来访问redis.所以首先准备了jedis的jar包,以及需要依赖的jar包. commons-pool2-2.3 hamcrest-core-1.3 jedis-2.7.2.jar 因为redis也是属于一种数据库,也是对数据的访问,所以把他放置在dao层,与service分开 import redis.clients.jedis.Jedis; import re

java中使用 redis (转载)

jedis是一个著名的key-value存储系统,而作为其官方推荐的java版客户端jedis也非常强大和稳定,支持事务.管道及有jedis自身实现的分布式. 在这里对jedis关于事务.管道和分布式的调用方式做一个简单的介绍和对比: 一.普通同步方式 最简单和基础的调用方式, @Test public void test1Normal() {     Jedis jedis = new Jedis("localhost");     long start = System.curre

java中使用redis --- Set集合的简单应用

1.java代码 public class RedisTest01 { public static void main(String[] args){ // connect redis server Jedis redis = new Jedis("127.0.0.1",6379); // 首先清除redis中的原有的键 redis.del("name"); redis.del("age"); // 向Set集合存放元素 redis.sadd(&

一 java 中使用redis 测试Redis的写入性能

配置文件: <?xml version='1.0' encoding='UTF-8' ?><!-- was: <?xml version="1.0" encoding="UTF-8"?> --><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema

二 java 中使用redis API编辑基本数据类型

package com.ssm.chapter18.main; import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import