RedissonClient主要功能概述
以下是 RedissonClient 提供的主要功能和特性的详细用法说明,结合代码示例和实际应用场景:
1. 分布式集合与映射
Redisson 提供了多种线程安全的分布式集合和映射,适用于分布式环境下的数据存储和操作。
RMap(分布式 Map)
- 功能:类似 Java 的
HashMap
,支持分布式键值对操作。 - 用法:
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
- 特点:
- 支持
putIfAbsent
、remove
等原子操作。 - 可设置键或值的过期时间(TTL)。
- 支持事件监听(如添加、删除、更新事件)。
- 支持
RList(分布式 List)
- 功能:类似 Java 的
ArrayList
,支持有序且可重复的元素集合。 - 用法:
RList<String> list = redisson.getList("myList"); list.add("item1"); list.add("item2"); System.out.println(list.get(0)); // 输出: item1
RSet(分布式 Set)
- 功能:类似 Java 的
HashSet
,支持无序且不可重复的元素集合。 - 用法:
RSet<String> set = redisson.getSet("mySet"); set.add("a"); set.add("b"); System.out.println(set.contains("a")); // 输出: true
RSortedSet(排序 Set)
- 功能:按自然顺序排序的集合。
- 用法:
RSortedSet<Integer> sortedSet = redisson.getSortedSet("mySortedSet"); sortedSet.add(3); sortedSet.add(1); System.out.println(sortedSet.first()); // 输出: 1
RQueue/RDeque(队列/双端队列)
- 功能:支持先进先出(FIFO)或双端操作。
- 用法:
RQueue<String> queue = redisson.getQueue("myQueue"); queue.offer("task1"); String task = queue.poll(); System.out.println(task); // 输出: task1
RBlockingQueue(阻塞队列)
- 功能:支持阻塞式获取元素(常用于消费者-生产者模式)。
- 用法:
RBlockingQueue<String> blockingQueue = redisson.getBlockingQueue("myBlockingQueue"); blockingQueue.put("task1"); // 阻塞直到有空间 String task = blockingQueue.take(); // 阻塞直到有元素
2. 分布式锁和同步器
Redisson 提供了多种锁和同步机制,用于解决分布式环境下的并发问题。
RLock(分布式可重入锁)
- 功能:实现跨进程/节点的锁控制。
- 用法:
RLock lock = redisson.getLock("myLock"); lock.lock(); // 加锁 try {// 执行业务逻辑 } finally {lock.unlock(); // 释放锁 }
- 高级特性:
- 自动续期:如果线程未主动释放锁,Redisson 会通过 Watchdog 自动续期(默认 30 秒)。
- 超时锁:
lock.lock(10, TimeUnit.SECONDS); // 10 秒后自动释放
RReadWriteLock(读写锁)
- 功能:允许多个读操作并发,写操作独占。
- 用法:
RReadWriteLock rwLock = redisson.getReadWriteLock("myRwLock"); rwLock.readLock().lock(); // 读锁 try {// 读操作 } finally {rwLock.readLock().unlock(); }
RSemaphore(信号量)
- 功能:控制并发访问的资源数量。
- 用法:
RSemaphore semaphore = redisson.getSemaphore("mySemaphore"); semaphore.trySetPermits(2); // 初始许可数为2 semaphore.acquire(); // 获取一个许可 try {// 执行操作 } finally {semaphore.release(); // 释放许可 }
RCountDownLatch(计数器闭锁)
- 功能:等待多个线程完成后再继续执行。
- 用法:
RCountDownLatch latch = redisson.getCountDownLatch("myLatch"); latch.trySetCount(2); // 等待2个线程完成 latch.countDown(); // 减少计数 latch.await(); // 等待计数归零
3. 分布式服务
RTopic(发布/订阅)
- 功能:实现分布式消息的发布和订阅。
- 用法:
RTopic<String> topic = redisson.getTopic("myTopic"); topic.addListener((channel, msg) -> {System.out.println("收到消息: " + msg); }); topic.publish("Hello Redisson!"); // 发布消息
RRemoteService(远程服务调用)
- 功能:跨节点调用远程方法。
- 用法:
// 服务端注册服务 RRemoteService remoteService = redisson.getRemoteService(); remoteService.register("MyService", new MyServiceImpl());// 客户端调用服务 MyService service = remoteService.get("MyService", MyService.class); service.doSomething();
RBatch(批处理)
- 功能:将多个操作打包成一批执行,减少网络开销。
- 用法:
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(限流器)
- 功能:控制请求的速率,防止系统过载。
- 用法:
RRateLimiter rateLimiter = redisson.getRateLimiter("myLimiter"); rateLimiter.trySetRate(RateType.OVERALL, 10, 1, TimeUnit.SECONDS); // 每秒最多10次 if (rateLimiter.tryAcquire()) {// 允许操作 } else {// 拒绝操作 }
4. 分布式执行服务
RExecutorService(分布式任务执行)
- 功能:跨节点提交任务并执行。
- 用法:
RExecutorService executor = redisson.getExecutorService("myExecutor"); Future<String> future = executor.submit(() -> {return "Task Result"; }); System.out.println(future.get()); // 输出: Task Result
RGarbageCollector(垃圾回收)
- 功能:自动清理过期的键或对象。
- 用法:
RGarbageCollector gc = redisson.getGarbageCollector("myGC"); gc.addReference("key1", "key2"); // key2 依赖 key1
5. 其他特性
Redis Sentinel/Cluster 支持
-
配置 Sentinel 模式:
Config config = new Config(); config.useSentinelServers().addSentinelAddress("redis://127.0.0.1:26379").setMasterName("mymaster"); RedissonClient redisson = Redisson.create(config);
-
配置 Cluster 模式:
config.useClusterServers().addNodeAddress("redis://127.0.0.1:6379", "redis://127.0.0.1:6380");
异步/Reactive/RxJava API
-
异步调用:
RFuture<String> future = redisson.getBucket("myKey").setAsync("value"); future.whenComplete((res, ex) -> {if (ex == null) {System.out.println("设置成功");} });
-
Reactive 编程:
RedissonReactiveClient reactiveClient = redisson.reactive(); reactiveClient.getBucket("myKey").set("value").thenAccept(v -> System.out.println("设置成功"));
-
RxJava 支持:
RedissonRxClient rxClient = redisson.rxJava(); rxClient.getBucket("myKey").set("value").subscribe(v -> System.out.println("设置成功"));
总结
RedissonClient 通过封装 Redis 的底层操作,提供了丰富的分布式功能,适用于以下场景:
- 分布式缓存:使用
RMap
、RList
等集合存储共享数据。 - 并发控制:通过锁和同步器解决资源竞争问题。
- 消息通信:利用
RTopic
实现跨节点的消息传递。 - 任务分发:通过
RExecutorService
实现分布式任务调度。 - 限流与降级:使用
RRateLimiter
控制流量,防止系统过载。
在实际应用中,可以根据业务需求选择合适的组件,并结合 Redis 的集群、Sentinel 等模式实现高可用和高性能的分布式系统。