问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Redis in Java - Lettuce

发布网友 发布时间:5小时前

我来回答

1个回答

热心网友 时间:5小时前

在Java中,使用Redis通常需要一个客户端。目前可用的客户端包括Redisson、Jedis和Lettuce。这里,我们将使用Lettuce创建一个简单的Java项目来利用Redis的功能。

Lettuce是一个可扩展的、线程安全的Redis客户端,支持同步、异步和响应式使用。多个线程可以共享一个连接,只要它们避免阻塞和事务操作(如BLPOP和MULTI/EXEC)。Lettuce是基于netty构建的,支持高级Redis特性,如哨兵、集群、管道、自动重连和Redis数据模型。

最新的Lettuce版本支持最新的Redis功能。您可以查阅Lettuce 5.1.3的API文档和Lettuce的基本使用教程。

为了在项目中使用Redis,我们使用IntelliJ IDE创建名为"xiangyu"的Spring Boot项目,并导入Lettuce依赖。在build.gradle文件中,添加Lettuce依赖以导入所需jar包。

在项目中创建主程序RedisMain,运行程序后,将输出有关Redis连接状态的信息。

使用RedisURI指定连接信息,包含主机名、端口号、认证和数据库详细信息。对于简单场景,可以使用"redis://localhost"。

Redis连接是持久的且线程安全的。如果连接断开,系统会自动重新连接直到调用close()函数为止。未完成的命令将在重连成功后执行。

所有连接默认继承自RedisClient,具有60秒的超时时间。每个连接可以设置特定的超时时间。

在Redis操作时,接收到的异常被封装为RedisException,该异常是RuntimeException的子类。

异步操作允许更高效地利用系统资源。Lettuce使用netty构建异步客户端。每个命令执行后,返回一个RedisFuture对象。CompleteableFuture或RedisFuture用于指向结果,直到计算完成。

异步API示例展示了如何使用future处理阻塞调用,以及如何通过thenAcceptAsync()或thenRunAsync()创建新线程来处理结果。

使用future可以形成链式调用,实现更高效的数据处理流程。在处理错误时,可以选择提供默认值、使用备份future或重试future。

通过设置默认timeout为20秒,可以优化Redis连接性能。

异步操作返回的future对象可以进一步处理,如通过onNext()、onError()和onCompleted()函数处理。

订阅future消息,可实现多线程并行数据处理。下面的示例展示了如何接收和打印消息。

使用lambda表达式简化future操作,通过take()限制处理的item数量。调用last()函数可以将异步操作转换为同步操作。

可以通过多种方式创建publishers,如just()、take()和collectList()。

下面的示例展示了如何使用reactive API处理publisher发布的消息。

Lettuce支持对publisher发布的消息进行transform,如使用flatMap()函数。通过reduce()函数,可以对消息进行聚集。

使用groupBy()函数实现消息分组。

处理key无value的情况,可以使用特定的函数。

处理错误时,可以选择提供默认值、使用备份publisher或重试future。

Redis事务通过WATCH、UNWATCH、EXEC、MULTI和DISCARD控制。

在事务执行期间,所有命令不会立即返回响应,直到EXEC命令执行后才获取响应。异步命令中的事务操作同样遵循此规则。

异步命令执行的事务操作使用reactive API,实现更高效的数据处理。

Redis命令接口提供了动态、类型安全的Redis命令调用方式。该接口主要用来发现所有扩展该接口的命令。

声明命令方法时,通常需要四步完成:确定方法名称、使用@Command注解指定方法对应的命令、显式指定参数名称和位置,以及使用@Key和@Value注解来指定参数中的键和值。

执行模型方面,Lettuce使用事件驱动的命令执行模型,命令方法可以采用同步、异步或响应式执行方式。

同步(阻塞)执行默认使用连接级别的超时时间,也可通过参数显式指定超时时间。若为null,则使用默认超时时间。

异步(future)执行时,命令方法将返回值封装进Future、CompletableFuture、CompletionStage或RedisFuture,用于异步执行命令。

响应式执行时,将命令方法的返回值封装在reactive类型,如Mono、Flux、Single、Observable、Single、Maybe、Flowable。

批量执行时,支持将多个命令进行批量执行,适用于无返回值的同步方法或返回RedisFuture的异步方法。批量执行条件包括到达批量命令数量或调用flush函数。

Redis支持在4.2版本后启用复制功能,以提高可靠性和读取吞吐量。

Redis Master/Replica可以在单独执行或结合Redis Sentinel时使用复制。Redis Sentinel可以提供自动故障转移和主节点升级功能,这些功能在Lettuce 3.1版本中被支持。

静态Master/Replica情况下,拓扑发现不应启动。在这种情况下,如AWS ElastiCache,Lettuce允许预定义节点拓扑,并指定一个或多个Redis地址作为列表。

Redis Sentinel交互可以通过Lettuce提供的API RedisClient.connectSentinel()来建立与Redis Sentinel节点的连接。

Redis Sentinel可以监控Redis实例,当主Redis实例挂机时,启动故障转移过程,选择一个副本Redis实例升级为主。

Redis Cluster基于分片概念,配置可能在运行时改变。节点可以添加,特定槽的主节点可以变化。

连接Redis Cluster时,可以创建多个seed节点,并且周期性地更新集群拓扑视图。

通过设置ReadFrom配置项,Lettuce可以指导如何在多节点连接环境中路由读操作到副本节点。默认情况下,Lettuce将读操作转发到主节点,确保数据强一致性。可以通过将不需要实时数据的读操作转发到副本节点来减少延迟并提高读取吞吐量。

Lettuce允许在连接级别设置ReadFrom配置,适用于该连接下的所有读操作。

使用ReadFrom配置可以分别在Redis Sentinel和Redis Standalone创建连接。

ReadFrom配置项包括多个可选项,具体取决于您的需求。

创建客户端资源时,有两种方式:在创建RedisClient和RedisClusterClient时提供ClientResources,或者在运行时动态创建资源。在创建资源后,它们将被客户端单独拥有并在客户端关闭时回收。

下面的示例展示了如何在Redis Sentinel和Redis Standalone中分别创建连接,同时利用ReadFrom配置进行优化。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
AFK半年后回归WOW,但发现好多东西搞不清楚了,求指教,多问题高分_百度知 ... wow85级什么本可以打378的猎人饰品 落花流水(打一动物)谜底及原因 办理买房按揭贷款需要多长时间啊 一手房如何办按揭 一手房按揭贷款申请条件 怎么把微信好友转移到另一个微信号上? 高铁站没有身份证可以进站吗 京东Plus会员每月优惠券去哪领?Plus会员哪里买最便宜? 京东plus会员优惠券在哪里领?怎么用? SpringBoot整合Redis(Lettuce)(7) Java Redis 客户端对比总结与使用建议 从小到大我爸爸总是骂我,这样正常么? 深圳买二手房多久可以卖 深圳二手房:何时可卖? 胆囊炎怎么治疗好的快 可以介绍一下各种调味料的基本用法以及搭配方法吗? 食堂的海带怎么炒好吃 食堂需要哪些调料 食堂调味品有哪些 学校食堂食品添加剂有哪些 华为怎么查看一天wifi使用量 血罐拔出来的血块是什么 win10玩游戏时出现打字框怎么办? 如何精加工有破口的盲孔 职成教育考证靠谱吗 ...宾补同位语是什么??要具体回答..!!最好有例句..!! 收取销售佣金交什么税 佣金要扣哪些税 佣金要交哪些税 南京信息工程大学的地理信息系统专业好不好,就业前景怎样 SpringBoot整合Redis,Jedis 六安瓜片泡多长时间 动车的学生票能在自动取票机上取吗 求往年的会计毕业论文 字数4000-10000左右 越多越好 一般的大专会计毕业论文要求多少字? 狂犬病为什叫恐水症?发病后死亡率是99.99%还是100%?还有这些不为人知的... 狂犬病恐水是怎么回事 好听的管理公司名字 好听的企业管理类公司名称 有机铁观音春茶多少钱一斤 25年生肖纪念币预约时间表 浙江温岭市100元航天纪念币在中国银行什么时候发行 天门市坂云智航科技有限公司怎么样? 深圳市智航云天科技有限公司怎么样? 小学毕业一般几月份? 面对不讲理的婆婆怎么办? 如何和脾气暴的婆婆相处? 小米路由器在不连外网的情况下怎样能够进入硬 索尼LT26I进水!! 各位大神sony lt26i,手机掉水里了,屏幕没有显示,但手机开锁什么的还是... 我的索尼LT26i在网吧下载东西后,锁屏和相机,和中间的触摸键都不能用了...