Redisson 是一个强大的 Redis 客户端,不仅可以实现限流和分布式锁,还提供了许多其他分布式工具和功能,涵盖数据结构、同步控制、消息队列等多个方面。以下是 Redisson 的主要作用和使用场景:
目录
1. 分布式数据结构
支持的数据结构
2. 分布式同步工具
常用工具
3. 分布式消息队列
消息队列类型
4. 分布式对象缓存
常见分布式缓存对象
5. 任务调度
分布式任务调度
6. 地理位置服务
7. 分布式 ID 生成器
8. Pub/Sub 发布订阅
9. 分布式事务
总结
1. 分布式数据结构
Redisson 提供了对 Redis 常见数据结构的封装,使其可以像本地 Java 数据结构一样使用,同时支持分布式存储。
支持的数据结构
- Map (RMap)
分布式哈希表,可以在多个实例间共享键值对。RMap<String, String> map = redissonClient.getMap("myMap"); map.put("key", "value");
- Set (RSet)
分布式集合,支持唯一性约束。RSet<String> set = redissonClient.getSet("mySet"); set.add("item1");
- List (RList)
分布式列表,支持顺序操作。RList<String> list = redissonClient.getList("myList"); list.add("element");
- Queue 和 Deque (RQueue, RDeque)
支持分布式队列和双端队列操作。RQueue<String> queue = redissonClient.getQueue("myQueue"); queue.add("message");
- ScoredSortedSet (RScoredSortedSet)
分布式有序集合(支持分数排序),适用于排行榜等场景。RScoredSortedSet<String> scoredSet = redissonClient.getScoredSortedSet("mySortedSet"); scoredSet.add(100.0, "player1");
2. 分布式同步工具
Redisson 提供了多种同步工具,用于解决分布式环境下的并发问题。
常用工具
-
分布式锁 (RLock)
用于控制分布式系统中的资源访问。RLock lock = redissonClient.getLock("myLock"); lock.lock(); try { // critical section } finally { lock.unlock(); }
-
可重入锁 (RLock) 支持同一线程的重入锁机制。
-
读写锁 (RReadWriteLock)
提供读多写单的分布式锁。RReadWriteLock rwLock = redissonClient.getReadWriteLock("myRWLock"); rwLock.readLock().lock(); try { // read operation } finally { rwLock.readLock().unlock(); }
-
信号量 (RSemaphore)
控制对共享资源的访问线程数量。RSemaphore semaphore = redissonClient.getSemaphore("mySemaphore"); semaphore.acquire(); try { // access resource } finally { semaphore.release(); }
-
可数信号量 (RCountDownLatch)
用于等待多个线程完成任务。RCountDownLatch latch = redissonClient.getCountDownLatch("myCountDownLatch"); latch.trySetCount(3); latch.await(); // wait for countdown to reach 0
3. 分布式消息队列
Redisson 支持基于 Redis 的分布式消息队列,适合异步任务处理和事件驱动的场景。
消息队列类型
- 标准队列 (RQueue)
适用于简单的任务队列。RQueue<String> queue = redissonClient.getQueue("taskQueue"); queue.add("task1"); String task = queue.poll();
- 阻塞队列 (RBlockingQueue)
消费者可以阻塞等待队列中的消息。RBlockingQueue<String> blockingQueue = redissonClient.getBlockingQueue("myBlockingQueue"); blockingQueue.put("task"); String task = blockingQueue.take();
- 延迟队列 (RDelayedQueue)
支持定时任务的延迟队列。RQueue<String> queue = redissonClient.getQueue("mainQueue"); RDelayedQueue<String> delayedQueue = redissonClient.getDelayedQueue(queue); delayedQueue.offer("task", 10, TimeUnit.SECONDS); // delay task for 10 seconds
4. 分布式对象缓存
Redisson 支持将 Java 对象直接存储到 Redis 中,方便快速读取和共享。
常见分布式缓存对象
- 分布式对象桶 (RBucket)
用于存储单个对象。RBucket<String> bucket = redissonClient.getBucket("myBucket"); bucket.set("Hello, Redis!"); String value = bucket.get();
- 分布式 Map 缓存 (RMapCache)
支持过期和淘汰策略的分布式 Map。RMapCache<String, String> mapCache = redissonClient.getMapCache("myMapCache"); mapCache.put("key", "value", 10, TimeUnit.SECONDS); // 10秒后过期
5. 任务调度
Redisson 提供了分布式的任务调度工具,适合定时任务和任务分片执行。
分布式任务调度
- 任务队列 (RScheduledExecutorService)
支持分布式的定时任务调度。RScheduledExecutorService executorService = redissonClient.getExecutorService("myExecutor"); executorService.schedule(() -> { System.out.println("Scheduled task executed"); }, 10, TimeUnit.SECONDS);
6. 地理位置服务
Redisson 提供 RGeo
接口,可以存储和查询地理位置数据(基于 Redis 的 Geo 数据类型)。
RGeo<String> geo = redissonClient.getGeo("geoKey");
geo.add(13.361389, 38.115556, "Palermo");
geo.add(15.087269, 37.502669, "Catania");
Double distance = geo.dist("Palermo", "Catania", GeoUnit.KILOMETERS);
7. 分布式 ID 生成器
Redisson 提供分布式 ID 生成器 RIdGenerator
,可以生成唯一的自增 ID。
RIdGenerator idGenerator = redissonClient.getIdGenerator("idGenerator");
idGenerator.tryInit(1, 1); // 初始化起始值和步长
long id = idGenerator.nextId();
8. Pub/Sub 发布订阅
支持 Redis 的发布订阅机制,用于事件驱动场景。
RTopic topic = redissonClient.getTopic("myTopic");
topic.addListener(String.class, (channel, message) -> {
System.out.println("Received message: " + message);
});
topic.publish("Hello, Pub/Sub!");
9. 分布式事务
Redisson 提供基于 Redis 的分布式事务管理器 RTransaction
。
RTransaction transaction = redissonClient.createTransaction(TransactionOptions.defaults());
RMap<String, String> map = transaction.getMap("myMap");
map.put("key", "value");
transaction.commit();
总结
除了限流和分布式锁,Redisson 在分布式数据结构、同步工具、消息队列、地理位置服务、任务调度等方面功能丰富,适合构建高性能分布式系统。
Redisson 的这些特性极大地降低了分布式系统开发的复杂度,使开发者可以专注于业务逻辑而非底层实现。
点个关注,不会迷路!