博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redisson之几种分布式队列
阅读量:5949 次
发布时间:2019-06-19

本文共 2862 字,大约阅读时间需要 9 分钟。

前言:

消息队列很好理解,顾明思议就是排队执行。Redisson 队列类似实现Java接口,例如Queue和BlockingQueue基于Redisson Api 来处理一些复杂的业务逻辑。

1.Queue

Redisson中的RQueue对象实现了接口。队列用于首先从最旧的元素开始处理元素的情况(也称为“先进先出”或FIFO)。与普通Java一样,RQueue的第一个元素可以使用peek()方法检查,或者使用poll()方法检查和删除。

RQueue
queue = redisson.getQueue("anyQueue");//定义个队列queue.add(new SomeObject());SomeObject obj = queue.peek(); //检查SomeObject someObj = queue.poll();//取值复制代码

2.BlockingQueue

Redisson中的RBlockingQueue对象实现了接口。BlockingQueues是阻止尝试从空队列轮询或尝试在已满队列中插入元素的线程的队列。线程被阻塞,直到另一个线程将一个元素插入空队列,或者从完整队列中轮询第一个元素。

您可以使用参数调用poll()方法,该参数指定线程等待元素变为可用的时间。

RBlockingQueue
queue = redisson.getBlockingQueue("anyQueue");queue.offer(new SomeObject());SomeObject obj = queue.peek();SomeObject someObj = queue.poll();SomeObject ob = queue.poll(10, TimeUnit.MINUTES); //使用参数调用poll()方法,该参数指定线程等待时间:备注: 故障转移或重新连接到Redis服务器期间,将自动重新订阅poll(),pollFromAny(),pollLastAndOfferFirstTo()和take()方法.复制代码

3.BoundedBlockingQueue

Redisson中的RBoundedBlockingQueue对象实现了有界阻塞队列结构。有界阻塞队列其容量有限。

下面的代码演示了如何在Redisson中实例化和使用RBoundedBlockingQueue。trySetCapacity()方法用于。:

RBoundedBlockingQueue
queue = redisson.getBoundedBlockingQueue("anyQueue");queue.trySetCapacity(2); //尝试设置阻塞队列的容量,trySetCapacity() 返回值: booleanqueue.offer(new SomeObject(1));queue.offer(new SomeObject(2));// 将会被阻止直到队列中有可用空间queue.put(new SomeObject());SomeObject obj = queue.peek();SomeObject someObj = queue.poll();SomeObject ob = queue.poll(10, TimeUnit.MINUTES);//复制代码

4.DelayedQueue

Redisson中的RDelayedQueue对象允许您在Redis中实现延迟队列。在使用指数退避等策略向消费者传递消息,在每次尝试传递消息失败后,重试之间的时间将呈指数级增长。

RQueue
destinationQueue = redisson.getQueue("anyQueue");RDelayedQueue
delayedQueue = getDelayedQueue(destinationQueue);// 在10秒内将对象移动到DestinationQueuedelayedQueue.offer("msg1", 10, TimeUnit.SECONDS);// 在1分中内将对象移动到DestinationQueuedelayedQueue.offer("msg2", 1, TimeUnit.MINUTES);//延迟队列中的每个元素将在与元素一起指定的延迟之后传输到目标队列。此目标队列可以是实现RQueue接口的任何队列,例如RBlockingQueue或RBoundedBlockingQueue。复制代码

5.PriorityQueue

Redisson中的RPriorityQueue对象实现了接口。优先级队列是不按元素的年龄排序的队列,而是按每个元素关联的优先级排序的队列。

RPriorityQueue
queue = redisson.getPriorityQueue("anyQueue");queue.trySetComparator(new MyComparator()); // 使用Comparator对队列中的元素进行排序:queue.add(3);queue.add(1);queue.add(2);queue.removeAsync(0);queue.addAsync(5);queue.poll();复制代码

6.PriorityBlockingQueue

Redisson中的RPriorityBlockingQueue对象结合了RPriorityQueue和RBlockingQueue的功能。与RPriorityQueue一样,RPriorityBlockingQueue使用Comparator对队列中的元素进行排序。

RPriorityBlockingQueue
queue = redisson.getPriorityBlockingQueue("anyQueue");queue.trySetComparator(new MyComparator()); // 设置比较对象queue.add(3);queue.add(1);queue.add(2);queue.removeAsync(0);queue.addAsync(5);queue.take();//故障转移或重新连接到Redis服务器期间,将自动重新订阅pol(),pollLastAndOfferFirstTo()和take()复制代码

# 根据自己的业务场景选取对应的消息队列。

更多redis,关注专栏:

转载于:https://juejin.im/post/5cf5ec9af265da1bc23f642a

你可能感兴趣的文章
CentOS7安装mysql
查看>>
RMB數字轉換中文
查看>>
基于rhel7.2的Zabbix平台搭建和部署(二)
查看>>
Html5本地存储和本地数据库
查看>>
我的友情链接
查看>>
JQ 循环切换DIV
查看>>
Nagios监控NetAPP NAS存储容量,Volume、Qtree
查看>>
Android Fragment实践(二)
查看>>
centos 修改主机名立即生效和重启后也生效的方法
查看>>
Windows 64 位 mysql 5.7以上版本包解压安装
查看>>
知道双字节码, 如何获取汉字 - 回复 "pinezhou" 的问题
查看>>
TClientDataSet[14]: 测试 FindFirst、FindNext、FindLast、FindPrior、Found
查看>>
CentOS 6.3中配置bond多网卡负载均衡
查看>>
调整数组使奇数全部都位于偶数前面
查看>>
clamav 完整查杀 linux 病毒实战
查看>>
我的友情链接
查看>>
EIGRP的Metric计算以及负载均衡
查看>>
org-capture 配置
查看>>
linux下lvs搭建负载均衡集群
查看>>
JMS 实例讲解
查看>>