redisson介绍

文章目录

      • 核心定位
      • 核心特性与功能
        • [1. 分布式锁与同步器(最常用)](#1. 分布式锁与同步器(最常用))
        • [2. 分布式对象](#2. 分布式对象)
        • [3. 分布式集合](#3. 分布式集合)
        • [4. 分布式服务](#4. 分布式服务)
        • [5. 高可用与性能优化](#5. 高可用与性能优化)
      • 快速使用示例
        • [1. 引入依赖(Maven)](#1. 引入依赖(Maven))
        • [2. 初始化Redisson客户端](#2. 初始化Redisson客户端)
        • [3. 分布式锁(RLock)示例](#3. 分布式锁(RLock)示例)
        • [4. 分布式Map(RMap)示例](#4. 分布式Map(RMap)示例)
      • 适用场景
      • 与其他Redis客户端的区别

Redisson是一个基于Redis的 Java驻留内存数据网格(In-Memory Data Grid) ,同时也是Redis官方推荐的Java客户端之一。它不仅提供了对Redis基本命令的封装,更核心的是通过封装复杂的分布式逻辑,为Java开发者提供了一系列 分布式对象、分布式集合、分布式服务 等高级功能,极大简化了分布式系统的开发。

核心定位

Redisson的核心价值在于:将Redis的分布式能力通过Java API的形式"本地化",让开发者无需直接编写复杂的Redis命令或分布式逻辑(如分布式锁的超时续期、重入性处理等),就能便捷地使用分布式工具。

核心特性与功能

1. 分布式锁与同步器(最常用)

Redisson提供了多种分布式锁实现,解决分布式环境下的并发安全问题,且原生支持Redis的集群、哨兵模式,保证高可用。

  • 可重入锁(RLock):支持重入性(同一线程可多次获取锁),自动处理锁的超时续期("看门狗"机制),避免业务未执行完锁提前释放。
  • 公平锁(FairLock):按线程请求顺序获取锁,避免"饥饿"问题。
  • 读写锁(RReadWriteLock):实现"读共享、写独占",适合读多写少场景(如缓存更新)。
  • 信号量(RSemaphore):分布式限流工具,控制并发访问数量。
  • 闭锁(RLatch):类似Java的CountDownLatch,协调多个线程同步执行(如等待所有子任务完成后再执行主任务)。
2. 分布式对象

基于Redis实现的分布式对象,支持跨JVM实例共享数据。

  • 分布式基础对象 :如RAtomicLong(分布式原子长整型)、RBitSet(分布式位集合)、RGeo(分布式地理空间对象,用于地理位置计算)等。
  • 分布式对象容器RBucket(分布式对象桶,可存储任意Java对象,自动序列化),例如用RBucket<String>存储分布式配置。
  • 过期与监听 :所有分布式对象支持设置过期时间,以及监听对象的创建、更新、删除事件(通过addListener)。
3. 分布式集合

实现了Java集合框架的分布式版本,支持跨服务实例共享集合数据。

  • 基础集合RList(分布式List)、RSet(分布式Set)、RMap(分布式Map)等,API与Java原生集合一致,降低学习成本。
  • 高级集合
    • RMapCache:带过期时间的Map,支持键或值的过期策略(如缓存场景)。
    • RSetCache:带过期时间的Set。
    • RQueue/RDeque:分布式队列/双端队列,支持阻塞操作(如take()阻塞获取元素)。
    • RScoredSortedSet:分布式有序集合,可用于排行榜、优先级队列等场景。
4. 分布式服务

提供分布式环境下的协调服务,解决跨服务通信与协作问题。

  • 分布式消息队列RQueue可作为简单队列,RTopic支持发布/订阅模式(类似Redis的Pub/Sub,但提供更丰富的API,如消息确认、持久化等)。
  • 分布式远程服务(RRemoteService):允许一个服务实例调用另一个实例的方法,类似RPC,但基于Redis实现。
  • 分布式调度任务(RScheduledExecutorService):分布式定时任务,支持跨节点执行任务调度。
5. 高可用与性能优化
  • 连接模式:支持单机、哨兵、集群、主从等多种Redis部署模式,自动适配拓扑结构变化。
  • Netty驱动:基于Netty框架实现,支持异步(Async)、同步、反应式(Reactive)API,性能优于传统的BIO客户端(如Jedis)。
  • 连接池管理:内置连接池,优化Redis连接的创建与复用。
  • 自动重连:当Redis节点故障时,自动尝试重连,保证服务稳定性。
  • 数据分片:在Redis集群模式下,自动处理数据分片与迁移,对开发者透明。

快速使用示例

1. 引入依赖(Maven)
xml 复制代码
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.23.3</version> <!-- 最新版本可查看Redisson官网 -->
</dependency>
2. 初始化Redisson客户端

通过配置类初始化RedissonClient(核心入口类):

java 复制代码
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;

public class RedissonConfig {
    public static RedissonClient getRedissonClient() {
        // 创建配置
        Config config = new Config();
        // 单机模式(其他模式:集群、哨兵等需对应配置)
        config.useSingleServer()
              .setAddress("redis://127.0.0.1:6379") // Redis地址
              .setPassword("123456") // 密码(无密码可不设)
              .setDatabase(0); // 数据库编号

        // 初始化客户端
        return Redisson.create(config);
    }
}
3. 分布式锁(RLock)示例
java 复制代码
public class RedissonLockDemo {
    public static void main(String[] args) {
        RedissonClient redisson = RedissonConfig.getRedissonClient();
        
        // 获取分布式可重入锁(锁名称为"order:lock:1001")
        RLock lock = redisson.getLock("order:lock:1001");
        
        try {
            // 加锁(默认30秒超时,看门狗自动续期)
            lock.lock();
            
            // 业务逻辑:如创建订单、扣减库存等
            System.out.println("执行分布式业务逻辑...");
            
        } finally {
            // 释放锁(必须在finally中执行,避免死锁)
            if (lock.isHeldByCurrentThread()) {
                lock.unlock();
            }
        }
        
        // 关闭客户端(实际项目中通常作为单例长期运行,无需频繁关闭)
        redisson.shutdown();
    }
}
4. 分布式Map(RMap)示例
java 复制代码
public class RedissonMapDemo {
    public static void main(String[] args) {
        RedissonClient redisson = RedissonConfig.getRedissonClient();
        
        // 获取分布式Map
        RMap<String, String> map = redisson.getMap("user:info");
        
        // 操作Map(API与Java原生一致)
        map.put("name", "张三");
        map.put("age", "25");
        
        String name = map.get("name");
        System.out.println("获取name:" + name); // 输出:张三
        
        // 关闭客户端
        redisson.shutdown();
    }
}

适用场景

  • 分布式锁:解决微服务架构下的并发资源竞争(如库存扣减、订单创建)。
  • 分布式缓存 :用RMapCache实现分布式缓存,替代本地缓存(如Caffeine)实现跨服务数据共享。
  • 分布式集合:存储需要跨服务共享的列表、集合数据(如用户在线列表、全局黑名单)。
  • 分布式协调:用信号量、闭锁实现多服务实例的协同工作(如分布式任务调度)。
  • 消息通信 :用RTopic实现服务间的发布/订阅通信(如事件通知)。

与其他Redis客户端的区别

  • Jedis/Lettuce:主要提供Redis命令的基础封装,需开发者自己处理分布式逻辑(如锁的续期、重入性)。
  • Redisson:在基础命令封装之上,提供了更高层次的分布式工具类,屏蔽了底层复杂逻辑,更适合开发分布式系统。

Redisson通过对Redis的深度封装,让Java开发者能像使用本地对象一样使用分布式工具,大幅降低了分布式系统的开发难度,是微服务、分布式架构中的重要工具。

相关推荐
前端 贾公子3 小时前
手写 Vuex4 源码(上)
1024程序员节
Forever_Hopeful4 小时前
数据结构:C 语言实现 408 链表真题:解析、拆分、反转与交替合并
1024程序员节
APIshop5 小时前
阿里巴巴 1688 API 接口深度解析:商品详情与按图搜索商品(拍立淘)实战指南
1024程序员节
芙蓉王真的好16 小时前
VSCode 配置 Dubbo 超时与重试:application.yml 配置的详细步骤
1024程序员节
默 语6 小时前
MySQL中的数据去重,该用DISTINCT还是GROUP BY?
java·数据库·mysql·distinct·group by·1024程序员节·数据去重
重生之我是Java开发战士6 小时前
【Java EE】Spring Web MVC入门:综合实践与架构设计
1024程序员节
Echoo华地7 小时前
GitLab社区版日志rotate失败的问题
1024程序员节
哲Zheᗜe༘7 小时前
了解学习Redis主从复制
数据库·redis·学习
asfdsfgas8 小时前
华硕 Armoury Crate 安装卡 50% 不动:清理安装缓存文件的解决步骤
1024程序员节