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 等模式实现高可用和高性能的分布式系统。

相关推荐
清幽竹客8 小时前
redis数据持久化和配置-15(备份和还原 Redis 数据)
数据库·redis·缓存
捡星星同学8 小时前
MySQL与Redis数据同步实践与优化
数据库·redis·mysql
喝养乐多长不高10 小时前
深入探讨redis:哨兵模式
数据库·redis·缓存·docker·主从复制·哨兵模式
武子康13 小时前
大语言模型 18 - MCP Model Context Protocol 基本项目 测试案例
数据库·redis·语言模型
Bug退退退12316 小时前
Redis 的速度为什么这么快
数据库·redis·缓存
一刀到底21116 小时前
java 在用redis 的时候,如何合理的处理分页问题? redis应当如何存储性能最佳
java·开发语言·redis
篱笆院的狗18 小时前
Redis 中如何保证缓存与数据库的数据一致性?
数据库·redis·缓存
FreeBuf_19 小时前
基于Go语言的恶意软件通过Redis配置滥用向Linux主机部署XMRig挖矿程序
linux·redis·golang