介绍
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官网或源码