Skip to content

介绍

zebra-spring-boot-starter-cache 是基于springboot data redis的封装和操作,已经有了redis封装,为什么还对redisson进行封装?因为在使用redis操作时,有些高级功能如:延迟队列或分布式锁等功能redisson进行简化并提供了便利性的方法。
zebra-spring-boot-starter-redisson是建立在zebra-spring-boot-starter-cache基础上,springboot data redis可以和redisson同时使用,zebra-spring-boot-starter-cache复用RedissonConnectionFactory连接工厂,减少对资源的消耗,不会同时建立两个连接工厂。
建议:redis常规操作使用 zebra-spring-boot-starter-cache 提供的方法进行操作。

依赖库

名称描述
zebra-spring-boot-starter-cache
redisson-spring-boot-starter

快速开始

引入

xml
<dependency>
	<groupId>io.github.zhanghongbin</groupId>
	<artifactId>zebra-spring-boot-starter-redisson</artifactId>
</dependency>

具体使用和配置参考redisson-spring-boot-starter官方文档

DelayedQueue 延迟队列

延迟队列支持任意延迟时间

  • 同一队列支持任意延迟时间与时间单位
  • 队列不会阻塞,到期即消费,如:第一条消息设置延迟10秒,第二条设置延迟5秒,即第二条会被先消费
  • 延迟时间长、延迟时间统一,建议使用:定时器实现
  • 数据量超大、并发超高,建议使用:RabbitMQ延迟队列
java

LocalDateTime now = LocalDateTime.now();
DelayedQueue<LocalDateTime> delayedQueue = DelayedQueue.get("delayedQueueKey");

// 发送一条延迟消息
delayedQueue.send(now, 5, TimeUnit.SECONDS);

// 消费一条延迟消息
LocalDateTime delayedMsg = delayedQueue.consumer();

// 持续消费(监听)
delayedQueue.consumer(msg -> {
    System.out.println(msg);
});

PriorityQueue 优先队列

java

Order bigOrder = new Order("VIP订单", 1000.0)
Order order = new Order("普通订单", 10.0)
//// 优先处理金额最大的订单
PriorityQueue<Order> priorityQueue = PriorityQueue.get("priorityQueueKey",(o1, o2) -> o2.getAmount().compareTo(o1.getAmount()));
priorityQueue.consumer();

BoundedBlockingQueue 有界阻塞队列

有界阻塞队列用于解决并发数据,实现异步合并消费问题

  • 有界队列可有效避免redis爆内存,从而导致的全部业务不可用
  • 有界队列当数据量超限时将会主动丢弃新的数据,如:限制队列中只阻塞10w条数据,当队列中有10w条数据未被消费时,新到来的数据将被丢弃
  • 为保障不主动丢弃新数据,应该优先保障消费方的可靠
java

String data = "test";
BoundedBlockingQueue<String> boundedBlockingQueue = BoundedBlockingQueue.get("queueKey");
// 往队列添加数据
boundedBlockingQueue.add(data);
// 非阻塞消费队列数据
String queueValue = boundedBlockingQueue.consumer();

RedissonUtil

RedissonUtil 直接使用 RuoYi-Vue-Plus ruoyi-common-redis 里代码,具体使用详见 RuoYi-Vue-Plus官网或源码