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开发者能像使用本地对象一样使用分布式工具,大幅降低了分布式系统的开发难度,是微服务、分布式架构中的重要工具。

相关推荐
二宝哥33 分钟前
CentOS 7.9 系统下 Redis 5.0.4 单机安装与源码编译安装指南
redis·centos
ShiXZ2136 小时前
Redis docker-compose 部署指南
redis·docker·eureka
青山木9 小时前
Redis 缓存一致性全解:从 Cache Aside 到延迟双删、Canal+MQ 的进阶之路
java·数据库·redis·后端·缓存
YDS82910 小时前
大营销平台 —— 活动SKU库存扣减业务及其一致性处理
java·spring boot·redis·rabbitmq·ddd
爬也要爬着前进1 天前
redis主从搭建
数据库·redis·缓存
用户095367515831 天前
在系统的学习 redis 前的疑惑
redis·go
吴声子夜歌1 天前
Redis 3.x——集群故障转移
java·数据库·redis·集群
明豆1 天前
Redis 分布式缓存生产实战
redis·分布式·缓存
海兰1 天前
【高速缓存】RedisVL 指南:从向量搜索到 AI 应用落地
人工智能·redis
weixin_727535621 天前
双Token认证体系深度拆解:Spring Security + JWT + Redis
redis·spring·wpf