简介
Redisson 不仅仅是一个 Redis 客户端,它更是一个在 Redis 基础上实现的 Java 驻内存数据网格(In-Memory Data Grid)。它的核心目标是让 Java 开发者能够以最自然的方式使用 Redis,将复杂的 Redis 命令封装成大家熟悉的 Java 接口(如 java.util.concurrent 包下的接口)。
一、核心设计理念
Redisson 的原理可以概括为:通过 Netty 实现高性能、非阻塞的通信,将 Redis 的数据结构映射为 Java 对象和分布式对象,并在此基础上,利用 Redis 的单线程原子性特性,实现了一系列分布式的、线程安全的 Java 常用工具。
二、核心架构与通信层
1. 基于 Netty 的异步非阻塞通信
- Netty 框架:Redisson 使用 Netty 4+ 作为其网络通信框架。这保证了高吞吐量和低延迟的连接管理。它允许同时处理成千上万的连接,而不会为每个连接创建单独的线程。
- 连接管理:Redisson 维护着一个与 Redis 服务器的连接池(可以是单机、哨兵、集群等模式)。它通过
ConnectionManager来统一管理这些连接的生命周期、心跳检测、重连机制等。 - 异步与响应式:所有操作在底层都是异步的。当你调用
get("key")时,Redisson 会通过 Netty 将一个请求写入 Channel,然后立即返回一个RFuture对象。你可以同步等待这个 Future(future.get()),也可以为其添加监听器进行异步回调。这为构建高并发应用打下了基础。
2. 编解码器
- Redisson 使用可插拔的编解码器来序列化/反序列化 Java 对象和 Redis 存储的二进制数据。
- 默认使用
JacksonJsonCodec,但你也可以选择StringCodec、AvroCodec等,或者自定义。这保证了存储格式的灵活性。
三、关键原理详解:如何实现分布式对象与服务
这是 Redisson 最核心、最巧妙的部分。它不仅仅是发送命令,而是在 Redis 的数据结构上构建了一层对象逻辑。
1. 分布式对象
Redisson 将 Redis 的每一种基本数据结构都包装成了一个 Java 对象。
- RList:对应 Redis 的 List。当你调用
RList.add(object)时,Redisson 底层会执行RPUSH命令。RList实现了java.util.List接口,所以你感觉像是在操作本地集合。 - RMap:对应 Redis 的 Hash。实现了
java.util.Map接口。底层使用HMSET,HGETALL等命令。 - RSortedSet:对应 Redis 的 Sorted Set。实现了
java.util.SortedSet接口。
原理:这些对象内部持有一个 CommandAsyncExecutor。你的每一个方法调用(如 map.put(key, value)),都会被转换成一个或多个 Redis 命令,并通过 Netty 发送给 Redis 服务器。
2. 分布式集合
这是对分布式对象的扩展,增加了本地缓存功能。例如 RListCache 和 RMapCache。
- 原理:它们不仅将数据存储在 Redis 中,还会在 JVM 本地内存中缓存一份。它们通过监听 Redis 的发布订阅(Pub/Sub) 频道来保证集群中所有节点的本地缓存一致性。当任何一个节点修改了数据,它会发布一个消息,其他节点收到后,会使自己本地的对应缓存失效。



