本文章基于Redis 6.0.9版本,Lettuce 6.0.1.RELEASE版本

目录

1.Redis Sentinel

1.1.直接连接Redis Sentinel节点

1.2.使用Redis Sentinel发现Redis

1.3.例子

示例1. Redis Sentinel节点连接

示例2. Redis upstream发现

2.Upstream Replica

2.1.Redis Sentinel

2.2.独立上游节点/复制节点(Upstream/Replica)

2.3.具有预定义节点地址的静态上游节点/复制节点(Upstream/Replica)

2.4.拓扑发现

2.5.拓扑更新

2.6.事务

2.7.例子

例子1. Redis独立主节点/复制节点

例子2. Redis Redis Sentinel

示例3. AWS ElastiCache集群


1.Redis Sentinel

使用Lettuce时,可以通过多种方式与Redis Sentinel和Redis Sentinel管理的节点进行交互:

  • 直接连接到Redis Sentinel,用于发出Redis Sentinel命令
  • 使用Redis Sentinel连接到upstream
  • 使用Redis Sentinel通过Upstream-Replica API连接到upstream节点和复制节点(replicas)。

在这两种情况下,都需要提供RedisURI,因为Redis Sentinel集成支持多个Sentinel主节点以提供高可用性。

请注意:Sentinel (Lettuce 3.x)集成仅提供异步连接,不提供连接池。

1.1.直接连接Redis Sentinel节点

Lettuce公开了一个API以直接与Redis Sentinel节点进行交互。 这对于使用生菜执行管理任务很有用。 你可以监视新的upstream节点,查询upstream地址,复制节点等。 通过RedisClient.connectSentinel()建立与Redis Sentinel节点的连接。 使用发布/订阅连接来订阅Sentinel事件。

1.2.使用Redis Sentinel发现Redis

一个或多个Redis Sentinels可以监视Redis实例。 这些Redis实例通常与Redis实例的复制节点一起操作。 一旦upstream出现故障,复制节点将被提升到upstream。 一旦无法再访问upstream实例,则Redis Sentinels将启动故障转移过程。 通常,客户端连接会终止。 断开连接可能导致以下任何选项:

  • upstream返回:连接恢复到Redis实例
  • 复制节点被提升到upstream:Lettuce使用masterId执行地址查找。 Redis Sentinel提供地址后,连接即立即恢复到新的Redis实例

在http://redis.io/topics/sentinel上了解更多信息

1.3.例子

示例1. Redis Sentinel节点连接

RedisURI redisUri = RedisURI.create("redis://sentinelhost1:26379");
RedisClient client = new RedisClient(redisUri);RedisSentinelAsyncConnection<String, String>  connection = client.connectSentinelAsync();Map<String, String> map = connection.master("myupstream").get();

示例2. Redis upstream发现

RedisURI redisUri = RedisURI.Builder.sentinel("sentinelhost1", "mymaster").withSentinel("sentinelhost2").build();
RedisClient client = RedisClient.create(redisUri);RedisConnection<String, String> connection = client.connect();

注意:每次使用Redis Sentinel连接到Redis实例时,都会使用与Redis Sentinel的新连接来查找Redis upstream。 这可能很耗时,尤其是在使用多个Redis Sentinel且其中一个或多个无法访问时。

2.Upstream Replica

Redis通过使用复制可以提高可用性并读取吞吐量。 从4.2开始,Lettuce为拓扑和ReadFrom-Settings提供了专用的上游节点/复制节点(Upstream/Replica)支持。

Redis Upstream/Replica可以独立运行,也可以与Redis Sentinel一起运行,后者提供自动故障转移和上游(upstream)升级。 从3.1版开始,Lettuce已支持上游连接的故障转移和上游升级。

通过提供客户端,编解码器以及一个或多个RedisURI,可以从MasterReplica 连接提供程序获得连接。

2.1.Redis Sentinel

使用Redis Sentinel的上游节点/复制节点(Upstream/Replica)将Redis Sentinel用作拓扑事件的注册表和通知源。 有关上游及其复制节点的详细信息可从Redis Sentinel获取。 Lettuce订阅Redis Sentinel事件,以通知所有提供的Sentinels。

2.2.独立上游节点/复制节点(Upstream/Replica)

运行独立的上游节点/复制节点(Upstream/Replica)设置需要一个种子地址来建立Redis连接。 提供一个RedisURI 将发现属于上游节点/复制节点(Upstream/Replica)设置的其他节点,并将发现的地址用于连接。 初始URI可以指向上游节点/复制节点(Upstream/Replica)。

2.3.具有预定义节点地址的静态上游节点/复制节点(Upstream/Replica)

在某些情况下,不应启用拓扑发现,或者发现的Redis地址不适合连接。 AWS ElastiCache属于此类。 Lettuce允许将一个或多个Redis地址指定为List并预定义节点拓扑。 在这种情况下,上游节点/复制节点(Upstream/Replica)URI将被视为静态拓扑,并且在这种情况下不会发现其他主节点。 Redis Standalone Upstream / Replica将发现提供的RedisURI的角色,并向适当的节点发出命令。

2.4.拓扑发现

Upstream-Replica拓扑是静态或半静态的。 具有附加复制节点的Redis Standalone实例不提供故障转移/ HA机制。 Redis Sentinel托管实例由Redis Sentinel控制,并允许故障转移(包括上游节点升级)。 MasteReplica API支持两种机制。 拓扑由TopologyProvider提供:

  • UpstreamReplicaTopologyProvider: 使用INFO REPLICATION输出进行动态拓扑查找。 复制节点作为replicaN = ...条目列出。 初始连接可以指向上游节点或复制节点,并且拓扑提供程序将发现节点。 如果发生上游节点/复制节点(Upstream/Replica)故障转移或拓扑更改,则需要在Lettuce外部重新建立连接。
  • StaticUpstreamReplicaTopologyProvider: 拓扑由URI列表和ROLE输出定义。 MasterReplica仅使用提供的节点,而不会在设置中发现其他节点。 如果发生上游节点/复制节点(Upstream/Replica)故障转移或拓扑更改,则需要在Lettuce外部重新建立连接。
  • SentinelTopologyProvider: 使用Redis Sentinel API进行动态拓扑查找。 特别是SENTINEL MASTERSENTINEL SLAVES输出。 上游节点/复制节点故障转移由Lettuce处理。

2.5.拓扑更新

  • 独立的游节点/复制节点(Upstream/Replica):执行一次性拓扑查找,此后仍保持静态
  • Redis Sentinel:订阅所有Sentinel并侦听Pub/Sub消息以触发拓扑刷新

2.6.事务

从5.1版开始,将事务期间的事务和命令路由到上游节点,以确保在单个节点上执行原子事务。 事务可以包含读和写操作,因此驱动程序无法预先决定可以使用哪个节点来运行实际事务。

2.7.例子

例子1. Redis独立主节点/复制节点

RedisClient redisClient = RedisClient.create();StatefulRedisMasterSlaveConnection<String, String> connection = MasteReplica.connect(redisClient, StringCodec.UTF8,RedisURI.create("redis://localhost"));
connection.setReadFrom(ReadFrom.UPSTREAM_PREFERRED);System.out.println("Connected to Redis");connection.close();
redisClient.shutdown();

例子2. Redis Redis Sentinel

RedisClient redisClient = RedisClient.create();StatefulRedisMasterReplicaConnection<String, String> connection = MasteReplica.connect(redisClient, StringCodec.UTF8,RedisURI.create("redis-sentinel://localhost:26379,localhost:26380/0#myupstream"));
connection.setReadFrom(ReadFrom.UPSTREAM_PREFERRED);System.out.println("Connected to Redis");connection.close();
redisClient.shutdown();

示例3. AWS ElastiCache集群

RedisClient redisClient = RedisClient.create();List<RedisURI> nodes = Arrays.asList(RedisURI.create("redis://host1"),RedisURI.create("redis://host2"),RedisURI.create("redis://host3"));StatefulRedisMasterSlaveConnection<String, String> connection = MasteReplica.connect(redisClient, new Utf8StringCodec(), nodes);
connection.setReadFrom(ReadFrom.UPSTREAM_PREFERRED);System.out.println("Connected to Redis");connection.close();
redisClient.shutdown();

Redis【有与无】【Lettuce】L4.Redis Sentinel相关推荐

  1. java整合redis集群_SpringBoot2.X整合Redis(单机+集群+多数据源)-Lettuce版

    最近项目尝试从SpringBoot1.X升级到SpringBoot2.X, 但是 Spring Boot 2.0中 Redis 客户端驱动现在由 Jedis变为了 Lettuce, 所以尝试测试一下L ...

  2. Redis 高级 Java 客户端 Lettuce 的用法及踩坑经验

    如果你在网上搜索 Redis 的 Java 客户端,你会发现,大多数文献介绍的都是 Jedis,不可否认,Jedis 是一个优秀的基于 Java 语言的 Redis 客户端,但是,其不足也很明显:Je ...

  3. Redis异常:JedisException: Can connect to sentinel, but 127.0.0.1:6379 seems to be not monitored...

    1. 异常现象 Caused by: redis.clients.jedis.exceptions.JedisException: Can connect to sentinel, but 127.0 ...

  4. Redis单例、主从模式、sentinel以及集群的配置方式及优缺点对比

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:爱宝贝丶 my.oschina.net/zhangxufen ...

  5. 慢连接 java_记一次redis的java客户端lettuce操作慢的解决方案

    因为项目业务需要,我们要把数据库中的大量数据缓存到redis中,并且会随时更新缓存,刚开始更新频率是1Hz,没有什么问题,后来更新频率达到了5Hz,lettuce开始疯狂报错:redis comman ...

  6. Redis - Spring Data Redis 操作 Jedis 、Lettuce 、 Redisson

    文章目录 官网 Jedis VS Lettuce Jedis Code POM依赖 配置文件 配置类 单元测试 Lettuce Code Redisson Code POM依赖 配置文件 配置类 单元 ...

  7. redis java客户端配置,Java的Redis客户端选择-jedis与Lettuce

    Lettuce 和 Jedis 的定位都是Redis的client,所以他们当然可以直接连接redis server. Jedis在实现上是直接连接的redis server,如果在多线程环境下是非线 ...

  8. Redis 单例、主从模式、sentinel 以及集群的配置方式及优缺点对比(转)

    摘要: redis作为一种NoSql数据库,其提供了一种高效的缓存方案,本文则主要对其单例,主从模式,sentinel以及集群的配置方式进行说明,对比其优缺点,阐述redis作为一种缓存框架的高可用性 ...

  9. [工具类] 系列二 Lettuce 访问Redis 工具类 RedisUtil

    最近公司Redis集群启用了ssl和密码校验,使用Jedis访问Redis Cluster的时候,支持不太好.看到spring-data-redis 2.x开始使用Lettuce访问Redis,于是开 ...

  10. 介绍一个基于Spring Redis Lua的无侵入应用级网关限流框架

    介绍一个基于Spring Redis Lua的无侵入应用级网关限流框架 项目介绍 为什么选择spring-redis-current-limit Quick Start 1. 引入spring-red ...

最新文章

  1. leetcode 994. Rotting Oranges | 994. 腐烂的橘子(BFS)
  2. eclipse插件安装的方法
  3. PHP的学习--PHP的闭包
  4. JSP中文及传中文参数乱码解决方法小结
  5. java 读取 image_如何在java读取sql里头读取image格式的数据转换成图片格式
  6. 白山云科技 CTO 童剑:空降后,如何有技术又有艺术地破局?
  7. 笔记《javascript高级程序设计》 第12章 DOM2和DOM3
  8. 1_python基础—变量
  9. C#反射读取和设置类的属性
  10. javascript本地,宿主,内置对象
  11. iis应用池解决方案
  12. 比特币 出块速度多少 为什么每秒7笔 以太坊15TPS
  13. 流模型 操作 xml
  14. android 安装apk 代码,Android 8.0安装apk的实例代码
  15. 04最大类间方差法(OTSU大津法)
  16. 同步十二进制加法计数电路设计(D触发器)
  17. SSM+高校教室管理系统 毕业设计-附源码181523
  18. 惠普HP Deskjet F4238 多功能一体机驱动
  19. c++保存数据为txt格式
  20. pygame 等有缘人接盘

热门文章

  1. 华为防火墙安全区域介绍及配置
  2. [论文解读 IJCAI 19] LogAnomaly Unsupervised Detection of Sequential and Quantitative Anomalies
  3. 裸机服务器装系统步骤,服务器裸机安装操作系统
  4. 胃不好吃什么养胃 三九胃泰提示常吃芝麻更护胃
  5. 智能机器人JIMI助力用户咨询体验提升
  6. 计算机用户全部删除,电脑用户怎么删除:批量删除计算机用户方法
  7. P1195 口袋的天空
  8. Android Reboot 命令执行过程
  9. 信安知识竞赛培训笔记
  10. Ubuntu、ROS、PX4常见问题及其解决办法