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