
Redisson分布式服务实战远程RPC、Live Objects与分布式调度器指南【免费下载链接】redissonRedisson: Valkey Redis Java Client and Real-Time Data Platform. Sync/Async/RxJava/Reactive API. Over 50 Valkey and Redis based Java objects and services: Set, Multimap, SortedSet, Map, List, Queue, Deque, Semaphore, Lock, AtomicLong, Map Reduce, Bloom filter, Spring, Tomcat, Scheduler, JCache API, Hibernate, RPC, local cache..项目地址: https://gitcode.com/GitHub_Trending/re/redissonRedisson 是功能强大的 Valkey Redis Java 客户端与实时数据平台其内置的远程 RPCRemote Service、**Live Objects分布式共享对象与分布式调度器Scheduled Executor**三大分布式服务让 Java 开发者无需自建消息中间件仅凭一个 Redis/Valkey 实例即可轻松实现跨 JVM 的远程调用、对象状态共享与定时任务调度。本文带你快速上手这三大特性并带你直达核心源码。一、远程 RPC把方法调用像发消息一样投递到别的节点 1. 什么是 Remote ServiceRedisson 的远程服务Remote Service本质上是基于 Redis/Valkey 队列的远程过程调用RPC你在 Java 接口上调用一个方法方法参数被序列化后写入请求队列另一台机器甚至另一台服务上注册的服务实现从队列中取出请求执行再把结果投递回调用方。它的关键优势在于解耦✅ 调用方与执行方互不感知甚至不需要同时在线消息会留在队列中等待✅ 支持任务分发到 Worker 池并行处理✅ 天然支持超时控制、ack 确认、调用取消等可靠机制。核心接口定义RRemoteService.java2. 并行与串行两种执行模式Redisson 会根据可用 Worker 数量自动选择模式模式条件行为并行模式可用 Worker ≥ 1 个以上多个任务同时分发到多个 Worker串行模式仅 1 个 Worker任务按 FIFO 顺序逐个执行其余排队总并行度计算公式为T R × NR 为服务端子实例数量N 为注册时指定的执行器数量超出部分将排队等待。3. 消息流请求、ack 与响应每次远程调用涉及两条队列请求队列服务端监听与响应队列客户端监听。完整流程为客户端把请求写入请求队列服务端取到请求后先向响应队列发送ack-response确认收到若超过 ack 超时未收到客户端抛出RemoteServiceAckTimeoutException服务端执行方法把结果写入响应队列客户端拿到返回值。这套机制的实现在 BaseRemoteService.java 与 RedissonRemoteService.java 中例如请求的投递通过 Lua 脚本原子化地写入 Hash任务体与 List队列 ID避免队列里有 ID 但任务丢失的脏状态。4. Fire-and-forget 等灵活选项通过RemoteInvocationOptions可以为每次调用定制行为比如noAck()不等待 ack减少一次往返noResult()只关心任务被执行不取结果noAck().noResult()典型的发射后不管模式适合日志、埋点类任务。此外接口还可标注RRemoteAsync/RRemoteReactive/RRemoteRx分别获得返回RFuture、Mono或Single/Completable的异步、响应式、RxJava3 调用形态——与 Redisson 整体的三套 API 风格保持一致。5. 取消调用远程调用支持在任意三个阶段被取消请求还在队列中、请求已接收但尚未开始执行、方法执行中此时需在业务代码中检查Thread.currentThread().isInterrupted()来优雅退出。二、Live Objects让 Java 对象活在 Redis 中 1. 为什么需要 Live Objects传统做法中共享状态要么序列化存取每次 get/set 都是取整包-改-存整包性能差且非实时要么自建同步协议。Redisson Live ObjectRLO把 Java 对象的每个字段映射到 Redis 的 HASH 结构中运行时通过字节码代理类把每个字段的getter/setter 翻译成 hget/hset 命令任何连接到同一 Redis/Valkey 的 JVM 都能实时读写该对象的字段Redis 单线程模型保证了字段访问天然原子读到的值不会被读到一半时被改掉。你可以把 Redis 服务器当成所有 JVM 共享的堆内存空间。字段一旦改变几乎立即可被其他进程、其他应用、其他服务器看到。核心实现RedissonLiveObjectService.java代理拦截逻辑位于 liveobject/core/2. 使用方式两个必备注解定义实体类需要REntity标注类、RId标注 ID 字段想要参与属性搜索的字段则加上RIndexRId对象的唯一标识REntity声明该 POJO 是 Live Object可被其他 Live Object 字段以引用方式关联存储的是引用而非整包状态RIndex字段参与搜索索引transient字段不会被存储到 Redis。通过RLiveObjectService的三种方法把对象接入 Redis方法语义attach()将对象挂接到 Redis丢弃本地已有的字段值以 Redis 为准merge()用本地对象状态覆盖Redis 中的状态persist()仅当对象尚不存在时存储否则抛异常3. 内置能力亮点关联引用Live Object 字段指向另一个 Live Object 时Redis 中只存引用取出后仍可继续按 Live Object 操作集合自动转换字段类型为List、Set、Map、Queue、Deque等标准 Java 集合时会自动转换为对应的 Redisson 分布式集合如RedissonList、RedissonMap数据直接存 Redis、跨 JVM 实时可见属性搜索通过find()Conditions.and/or/eq/in/gt/lt...组合条件像数据库查询一样按字段值检索对象搜索引擎实现在 LiveObjectSearch.java过期清理Live Object 设置 TTL 过期后服务会订阅__keyspace事件自动清理关联的索引与引用见 RedissonLiveObjectService.java 中的addExpireListener。典型适用场景多人协作编辑的文档模型、游戏世界共享状态、订单/购物车等需要多节点共享同一对象实时视图的业务。三、分布式调度器Cron 任务不再多机重复跑 ⏰1. 解决什么问题用 Spring 的Scheduled时集群里 N 台机器就会跑 N 份相同任务。Redisson 的RScheduledExecutorService通过 Redis 做任务注册中心与抢占式调度任务只注册一次全集群共享多个调度 Worker 竞争执行但同一时刻只有一个节点执行支持 Cron 表达式、固定延迟、固定频率三种调度方式。2. 内部机制一览调度核心实现在 ScheduledTasksService.java它用一组 Redis 数据结构协作完成调度ZSET按时间排序的调度队列zadd按startTime入队到点即为队首Lua 脚本原子写入任务 ID、任务体、重试间隔、过期时间一次脚本内写入避免半初始化状态发布订阅唤醒当新任务插到队首时publish通知所有调度 Worker 立即检查实现低延迟唤醒TTL 支持ScheduledParameters携带过期时间超期任务由ZSET过期时间键自动剔除。Cron 解析由 CronExpression.java 实现通用任务执行框架见 TasksRunnerService.java 与 TasksService.java。3. 使用要点通过redisson.getExecutorService(myExecutor)获取RScheduledExecutorService实例即可调用scheduleAtFixedRate、scheduleWithFixedDelay、schedule含 Cron等标准方法。由于调度状态全部在 Redis 中任务在任意节点注册、在任意存活节点执行节点宕机后任务依然按时触发无需人工干预。 提示getExecutorService()还有非调度版本RExecutorService配合RemoteExecutorService可将普通任务分发到集群中空闲的 Worker 执行实现分布式线程池。四、三大特性选型对照表 特性一句话定位典型场景Remote ServiceRPC跨 JVM 的方法调用基于队列 ackWorker 池任务分发、微服务远程调用、跨节点方法执行Live Objects对象字段级实时共享Redis 当共享堆多节点协作状态、共享模型对象、按属性检索Scheduled Executor全集群唯一执行一次的分布式定时任务Cron 报表、清理任务、集群级轮询三者可以组合使用调度器到点触发 → 通过 Remote Service 把任务投递给 Worker 池 → Worker 修改 Live Object 共享状态其他节点实时可见。五、延伸阅读 三大特性的完整官方文档与更多示例docs/data-and-services/services.md分布式锁等更基础的服务docs/data-and-services/locks-and-synchronizers.mdRPC 代理实现redisson/src/main/java/org/redisson/remote/含 SyncRemoteProxy.java、AsyncRemoteProxy.java 等Live Object 注解 APIredisson/src/main/java/org/redisson/api/ 下的RLiveObjectService、REntity、RId调度器参数ScheduledParameters相关测试用例学习用法的最佳素材RedissonRemoteServiceTest.java、RedissonLiveObjectServiceTest.java⚠️ 说明开源版 Live Object 搜索引擎未做深度优化生产环境大数据量检索建议评估 Redisson PRO 的搜索能力。总结Redisson 用Redis 即中间件的思路把 RPC、分布式对象与分布式调度三块能力内置在客户端中——不引入 Kafka、不部署 xxl-job、不手写序列化同步逻辑一套 Valkey/Redis 集群就能撑起一套轻量而可靠的分布式服务底座。【免费下载链接】redissonRedisson: Valkey Redis Java Client and Real-Time Data Platform. Sync/Async/RxJava/Reactive API. Over 50 Valkey and Redis based Java objects and services: Set, Multimap, SortedSet, Map, List, Queue, Deque, Semaphore, Lock, AtomicLong, Map Reduce, Bloom filter, Spring, Tomcat, Scheduler, JCache API, Hibernate, RPC, local cache..项目地址: https://gitcode.com/GitHub_Trending/re/redisson创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考