java队列实现限流_如何使用队列实现微服务限流算法?

  • Post author:
  • Post category:java


队列在平时开发中可能是出现频率最高的数据结构之一了,但是大部分情况下,我们都是用别人已经实现好的,比如kafka,比如redis里的list,以至于让人怀疑为什么还要去学习队列呢?希望今天的内容可以给你一些启发。

什么是队列

为了整个文章的完整性,我们还是来介绍一下什么是队列。我们举个生活中常见的案例,假设你在周杰伦的奶茶店买奶茶,由于人很多,为了保持公平和秩序,你被要求排队,最先来的人排到最前面,这样可以保证先来的人可以先买到奶茶,当奶茶店发现有插队等异常情况的时候,店员就会出来进行协调了,让整个队伍再次变得有序。在我看来,队列其实也是为了保证数据的秩序和公平性的一种手段。在实现队列的过程中我们也要处理一些异常,在编写队列代码的时候,我们同样需要进行规则限制让队列变得公平有序。

队列比我们前面两篇说到的数组和链表是要简单的,总结下来其实只有三条规则,一、数据永远只能从队尾插入,二、我们只能从队头取数据,三、最先入队(enqueue)的数据一定最先出队(dequeue)。但凡是队列相关的文章都会说队列是一个FIFO的数据结构,也就是First In First Out。在软件工程中,特别是并发程序,比如多进程、多线程、协程,要使队列能正确工作还是有些复杂的,我们在后面会详细讲到如何实现各种类型的队列。

队列里的数据是怎么保存起来的呢?这就会用到我们前面两节提到的数组和链表了,当然也可以使用树和堆来实现(实际上优先队列最经典的实现方式就是使用堆)。但由于我们还没讲到树和堆这类数据结构,这里我们只通过数组和链表来实现。

数组的实现

我们说,数组是一段连续的



版权声明:本文为weixin_34312809原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。