RedissonClient主要功能概述

以下是 RedissonClient 提供的主要功能和特性的详细用法说明,结合代码示例和实际应用场景:


1. 分布式集合与映射

Redisson 提供了多种线程安全的分布式集合和映射,适用于分布式环境下的数据存储和操作。

RMap(分布式 Map)
  • 功能 :类似 Java 的 HashMap,支持分布式键值对操作。

  • 用法

    java 复制代码
    RedissonClient redisson = Redisson.create(config);
    RMap<String, String> map = redisson.getMap("myMap");
    map.put("key1", "value1");
    String value = map.get("key1");
    System.out.println(value); // 输出: value1
  • 特点

    • 支持 putIfAbsentremove 等原子操作。
    • 可设置键或值的过期时间(TTL)。
    • 支持事件监听(如添加、删除、更新事件)。
RList(分布式 List)
  • 功能 :类似 Java 的 ArrayList,支持有序且可重复的元素集合。

  • 用法

    java 复制代码
    RList<String> list = redisson.getList("myList");
    list.add("item1");
    list.add("item2");
    System.out.println(list.get(0)); // 输出: item1
RSet(分布式 Set)
  • 功能 :类似 Java 的 HashSet,支持无序且不可重复的元素集合。

  • 用法

    java 复制代码
    RSet<String> set = redisson.getSet("mySet");
    set.add("a");
    set.add("b");
    System.out.println(set.contains("a")); // 输出: true
RSortedSet(排序 Set)
  • 功能:按自然顺序排序的集合。

  • 用法

    java 复制代码
    RSortedSet<Integer> sortedSet = redisson.getSortedSet("mySortedSet");
    sortedSet.add(3);
    sortedSet.add(1);
    System.out.println(sortedSet.first()); // 输出: 1
RQueue/RDeque(队列/双端队列)
  • 功能:支持先进先出(FIFO)或双端操作。

  • 用法

    java 复制代码
    RQueue<String> queue = redisson.getQueue("myQueue");
    queue.offer("task1");
    String task = queue.poll();
    System.out.println(task); // 输出: task1
RBlockingQueue(阻塞队列)
  • 功能:支持阻塞式获取元素(常用于消费者-生产者模式)。

  • 用法

    java 复制代码
    RBlockingQueue<String> blockingQueue = redisson.getBlockingQueue("myBlockingQueue");
    blockingQueue.put("task1"); // 阻塞直到有空间
    String task = blockingQueue.take(); // 阻塞直到有元素

2. 分布式锁和同步器

Redisson 提供了多种锁和同步机制,用于解决分布式环境下的并发问题。

RLock(分布式可重入锁)
  • 功能:实现跨进程/节点的锁控制。

  • 用法

    java 复制代码
    RLock lock = redisson.getLock("myLock");
    lock.lock(); // 加锁
    try {
        // 执行业务逻辑
    } finally {
        lock.unlock(); // 释放锁
    }
  • 高级特性

    • 自动续期:如果线程未主动释放锁,Redisson 会通过 Watchdog 自动续期(默认 30 秒)。

    • 超时锁

      java 复制代码
      lock.lock(10, TimeUnit.SECONDS); // 10 秒后自动释放
RReadWriteLock(读写锁)
  • 功能:允许多个读操作并发,写操作独占。

  • 用法

    java 复制代码
    RReadWriteLock rwLock = redisson.getReadWriteLock("myRwLock");
    rwLock.readLock().lock(); // 读锁
    try {
        // 读操作
    } finally {
        rwLock.readLock().unlock();
    }
RSemaphore(信号量)
  • 功能:控制并发访问的资源数量。

  • 用法

    java 复制代码
    RSemaphore semaphore = redisson.getSemaphore("mySemaphore");
    semaphore.trySetPermits(2); // 初始许可数为2
    semaphore.acquire(); // 获取一个许可
    try {
        // 执行操作
    } finally {
        semaphore.release(); // 释放许可
    }
RCountDownLatch(计数器闭锁)
  • 功能:等待多个线程完成后再继续执行。

  • 用法

    java 复制代码
    RCountDownLatch latch = redisson.getCountDownLatch("myLatch");
    latch.trySetCount(2); // 等待2个线程完成
    latch.countDown(); // 减少计数
    latch.await(); // 等待计数归零

3. 分布式服务

RTopic(发布/订阅)
  • 功能:实现分布式消息的发布和订阅。

  • 用法

    java 复制代码
    RTopic<String> topic = redisson.getTopic("myTopic");
    topic.addListener((channel, msg) -> {
        System.out.println("收到消息: " + msg);
    });
    topic.publish("Hello Redisson!"); // 发布消息
RRemoteService(远程服务调用)
  • 功能:跨节点调用远程方法。

  • 用法

    java 复制代码
    // 服务端注册服务
    RRemoteService remoteService = redisson.getRemoteService();
    remoteService.register("MyService", new MyServiceImpl());
    
    // 客户端调用服务
    MyService service = remoteService.get("MyService", MyService.class);
    service.doSomething();
RBatch(批处理)
  • 功能:将多个操作打包成一批执行,减少网络开销。

  • 用法

    java 复制代码
    RBatch batch = redisson.createBatch();
    RBucket<String> bucket1 = batch.getBucket("key1");
    RBucket<String> bucket2 = batch.getBucket("key2");
    bucket1.set("value1");
    bucket2.set("value2");
    batch.execute(); // 批量执行
RRateLimiter(限流器)
  • 功能:控制请求的速率,防止系统过载。

  • 用法

    java 复制代码
    RRateLimiter rateLimiter = redisson.getRateLimiter("myLimiter");
    rateLimiter.trySetRate(RateType.OVERALL, 10, 1, TimeUnit.SECONDS); // 每秒最多10次
    if (rateLimiter.tryAcquire()) {
        // 允许操作
    } else {
        // 拒绝操作
    }

4. 分布式执行服务

RExecutorService(分布式任务执行)
  • 功能:跨节点提交任务并执行。

  • 用法

    java 复制代码
    RExecutorService executor = redisson.getExecutorService("myExecutor");
    Future<String> future = executor.submit(() -> {
        return "Task Result";
    });
    System.out.println(future.get()); // 输出: Task Result
RGarbageCollector(垃圾回收)
  • 功能:自动清理过期的键或对象。

  • 用法

    java 复制代码
    RGarbageCollector gc = redisson.getGarbageCollector("myGC");
    gc.addReference("key1", "key2"); // key2 依赖 key1

5. 其他特性

Redis Sentinel/Cluster 支持
  • 配置 Sentinel 模式

    java 复制代码
    Config config = new Config();
    config.useSentinelServers()
          .addSentinelAddress("redis://127.0.0.1:26379")
          .setMasterName("mymaster");
    RedissonClient redisson = Redisson.create(config);
  • 配置 Cluster 模式

    java 复制代码
    config.useClusterServers()
          .addNodeAddress("redis://127.0.0.1:6379", "redis://127.0.0.1:6380");
异步/Reactive/RxJava API
  • 异步调用

    java 复制代码
    RFuture<String> future = redisson.getBucket("myKey").setAsync("value");
    future.whenComplete((res, ex) -> {
        if (ex == null) {
            System.out.println("设置成功");
        }
    });
  • Reactive 编程

    java 复制代码
    RedissonReactiveClient reactiveClient = redisson.reactive();
    reactiveClient.getBucket("myKey").set("value")
                  .thenAccept(v -> System.out.println("设置成功"));
  • RxJava 支持

    java 复制代码
    RedissonRxClient rxClient = redisson.rxJava();
    rxClient.getBucket("myKey").set("value")
            .subscribe(v -> System.out.println("设置成功"));

总结

RedissonClient 通过封装 Redis 的底层操作,提供了丰富的分布式功能,适用于以下场景:

  1. 分布式缓存 :使用 RMapRList 等集合存储共享数据。
  2. 并发控制:通过锁和同步器解决资源竞争问题。
  3. 消息通信 :利用 RTopic 实现跨节点的消息传递。
  4. 任务分发 :通过 RExecutorService 实现分布式任务调度。
  5. 限流与降级 :使用 RRateLimiter 控制流量,防止系统过载。

在实际应用中,可以根据业务需求选择合适的组件,并结合 Redis 的集群、Sentinel 等模式实现高可用和高性能的分布式系统。

相关推荐
二宝哥1 小时前
CentOS 7.9 系统下 Redis 5.0.4 单机安装与源码编译安装指南
redis·centos
ShiXZ2137 小时前
Redis docker-compose 部署指南
redis·docker·eureka
青山木10 小时前
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