股市熔断是什么意思?你知道什么是股市熔断机制吗?

在股市当中有很多的小知识,比如我们日常所听到的牛市,熊市,多头,空头,熔断等。那么在股市中熔断是什么意思难?就和小编一起来了解下吧  熔断,是指对某一合约在达到涨跌停板之前,设置一个熔断价格,使合约买卖报价在一段时间内只能在这一价格范围内交

关于股市熔断是什么意思很多人还不了解,今天小编就为大家整理了相关内容,希望对各位有所帮助:

“美股三大股指期货全部大跌,触及交易限制。美股低开后不断下挫,盘中标普500指数达7%,触发熔断机制。”短短时间里美股连续熔断,有网友表示,“没想到,美股熔断的频率比我洗头还勤快。接下来具体说说你知道什么是股市熔断机制吗

“熔断”是什么?

股市熔断是什么意思?你知道什么是股市熔断机制吗?

近九旬高龄的股神巴菲特

一辈子看见的美股五次熔断

10天我就实现了4次

股神看了都要黑人问号脸

股市熔断是什么意思?你知道什么是股市熔断机制吗?

刚刚迈入2020的前三个月似乎全世界的调频都乱套了。美国当地时间3月9日、12日、16日、18日连续四次触发熔断机制,创造了美股历史上前所未有的记录。

那么问题来了!

股市熔断是什么意思?你知道什么是股市熔断机制吗?

什么是熔断?

熔断机制(Circuit Breaker),也叫自动停盘机制,是指当股指波幅达到规定的熔断点时,交易所为控制风险采取的暂停交易措施。简单来说,就是在股市过快涨跌时自动停盘。

3月9日,美股本年度靠前次的盘中熔断,是油价暴跌引起的。3月6日,欧佩克与俄罗斯原油关于石油贸易的减产谈崩,作为欧佩克主导国的沙特宣布全国增产,顺带来了个降价卖油,国际油价狂降;俄罗斯很生气,根据战斗民族一向的特点“我们绝不会轻易的认输”,宣布增产。俄罗斯石油公司预计4月起增加石油产量,直接引发了全球原油价格暴跌。受油价暴跌和新冠疫情联合夹击,美股3月9日开盘后全线暴跌,触发今年靠前次熔断。

股市熔断是什么意思?你知道什么是股市熔断机制吗?

油价跌和股市跌有什么关系?

美国油企之前大肆举债向各种金融机构借款用以开采页岩油,而这些债券是是高收益债券市场的重要组成部分,约占市场的10%。这些债务会在今年到达一个偿还高峰。油价的下跌直接导致这些油企偿债压力巨大,信贷状况恶化。在引发通缩隐忧的同时,会引爆美国页岩油公司的信用风险,从而导致银行坏帐的激增,这必然对美股甚至整个金融系统造成冲击。

当然,新冠疫情也为股市转为熊市做出了不小的贡献。疫情在全世界扩散,已蔓延到200多个国家,全球主要的工业国家无一幸免,导致世界范围的大面积停工,全球供应链的中断势必形成资金链的大断裂,各国经济停摆必然导致商业和个人贷款的违约风潮。除中国外,貌似其它国家的防控疫情措施收效甚微。而新冠疫情的爆发简直可以说是“速冻”了全球的消费,这可是包括中国在内,难道春节期间大家宅在家里不是只在后悔自己年前没有多买几身睡衣吗?

对疫情的担忧直观的反映到了经济的晴雨表--股市上,金融市场的信心受到前所未有的打击,感觉疫情威胁比想像中严重得多,就连最具有避险属性的黄金及美国国债都受到了大规模的抛售,这很好理解 ,流动性较好的黄金和低风险债券会在短期内被卖出以应对金融风险,但这直接导致3月12日美股的开盘熔断。

股市熔断是什么意思?你知道什么是股市熔断机制吗?

What is 量化宽松?

首先,央行需要印钱,接着去市场上购买债券。相当于央行把新制造出来的钱借给那些发行债券的机构。购买债券会产生两种效果:首先利率会下降,用以刺激消费和投资,同时经济中的信贷流动性会增加。政策制定者希望借此刺激本国经济增长,增加就业。

美联储的一系列政策显然被证明救市无效,纽约股市在3月16日开盘暴跌,第3次触发熔断机制。

3月17日,美联储重启金融危机时期的商业票据融资机制(CPFF),绕过银行,直接给企业放贷输血。与此同时,美国财政部宣布将出台1万亿美元的经济刺激计划。这一计划包括为小企业提供3000亿美元的贷款,向市场注入2000亿美元来保持稳定性,还有两轮2500亿美元的支票发放,在未来两周内或将向美国民众发放人均1000美元的支票。至此,桥水基金创始人达里奥划分的货币政策三种进阶形态——利率调控、量化宽松、“直升机撒钱”,都被美联储采用了。以前美国一有事可以找美联储降息,现在连美联储都没什么降息空间了,毕竟再降就是负利率了。但是,就像大家看到的,全球三分之一的国家已经是负利率或者是零利率了。市场似乎仍然没有什么信心,美股于当地时间3月18日开盘后,遭遇两周内第4次熔断。

股市熔断是什么意思?你知道什么是股市熔断机制吗?

对中国来说,倒未必不是一个利好消息。首先,我国疫情高峰已过,正在有条不紊的逐步推进复工复产,投资者的信心有所恢复。其次,我国是世界靠前大石油进口国、第二大消费国,相对于美国这个产油国而言,石油价格下跌对我国的,影响利大于弊。

就在前不久,3月27日下午,特朗普正式签署了国会表决通过2万亿元美元的经济刺激法案。这份也是美国史上最大规模的刺激经济法案。

股市熔断是什么意思?你知道什么是股市熔断机制吗?

江苏天鼎证券投资咨询有限公司:你知道什么是股市熔断机制吗

在股市当中有很多的小知识,比如我们日常所听到的牛市,熊市,多头,空头,熔断等。那么在股市中熔断是什么意思难?就和小编一起来了解下吧

熔断,是指对某一合约在达到涨跌停板之前,设置一个熔断价格,使合约买卖报价在一段时间内只能在这一价格范围内交易的机制。

好比设定的熔断价格是5%,那么到达涨跌到5%的时候就会停止价格申请。类似于保险丝,那个设定价格就是烧断保险丝

为何要实施熔断机制?

其实我国的期货市场在沪深300期货推出之前中金所在仿真交易阶段测试了熔断机制,但期指开市前就没有触发过熔断,同时还有涨跌停的限制,因此股指期货上市时就没有推出。但人算不如天算,以前从未出现过的千股跌停今年频繁出现,甚至股指期货都出现过连续跌停的情况。此时,推出熔断机制可以说是迫在眉睫。恰好美国股指期货出现熔断。于是乎,在众多股民的呼声中,宣布将研究制定实施指数熔断机制,并发放征求稿。

1.怎么触发熔断?

只有当沪深300指数涨跌幅超过5%或7%时候,触发。沪深300指数主要由沪深两市蓝筹股组成。创业板指再怎么暴涨暴跌都不会触发熔断。因此,有市场人士认为,下月小票成交量将显著提高,成交进一步活跃。

2.涨跌停板还有吗?

个股仍然有10%涨跌停板限制。

3.大涨熔断吗?

熔断机制适用于暴涨暴跌,涨跌幅触及5%和7%都要熔断。

4.暂停交易时间怎么算?

分为两档,5%和7%。

沪深300涨跌幅超过5%,不到7%时,暂停交易15分钟。不过在14:45及之后触发5%熔断阈值暂停交易至收市。11:30前未完成的指数熔断,延续至13:00后的交易时段继续进行,直至届满。

涨跌幅超过7%时,直接暂停交易至收市。

5.熔断后多少品种暂停交易?

A股、B股、基金(黄金交易型开放式证券投资基金、交易型货币市场基金、债券交易型开放式指数基金除外)、可转换公司债券和可交换公司债券。中金所将暂停股指期货所有产品交易(包括沪深300、中证500和上证50股指期货5%和7%两档阈值),但国债期货交易正常进行。

6.熔断期间能否下单?

对沪深交易所来说,指数熔断于15:00前结束的,熔断期间可以继续申报,也可以撤销申报。指数熔断持续至15:00结束的,熔断期间仅接受撤销申报,不接受其他申报。中金所熔断前12分钟不接受下单、撤单。熔断结束前3分钟接受。

对A股影响几何?

股票熔断是什么?大连华讯投资股份有限公司告诉您

“美股三大股指期货全部大跌,触及交易限制。美股低开后不断下挫,盘中标普500指数达7%,触发熔断机制。”短短时间里美股连续熔断,有网友表示,“没想到,美股熔断的频率比我洗头还勤快。”“见证5次熔断的巴菲特还是太年轻了。”“24天跌10000点,上帝还能保佑美国吗?”

那么什么是股票熔断呢?大连华讯投资股份有限公司简单介绍一下,所谓股票熔断其实是指当市场交易整体或个股涨跌幅度超过起先设定的尺度时,市场暂停交易的机制,通常分为两种,大盘熔断和个股熔断,目前,这一机制在欧美市场被普遍采用。

熔断机制有什么作用呢?在大连华讯投资股份有限公司看来,熔断机制是为了给市场一个冷静期,让投资者对市场信息充分消化,防止整体市场或某一证券出现价格大幅波动,尤其防止股市大幅暴跌,甚至导致股灾发生,以维护市场的交易秩序稳定。

熔断机制是为了保证市场交易稳定在一定的范围之内,当指数价格超出监管部门规定的范围时,自动暂停整个市场或者特定证券的交易。目的是为了在市场快速上涨或者下跌时,提供给投资者机会评估股价异动的原因和寻找潜在的系统风险,然后再决策投资方向。

熔断机制的运作原理是什么?当投资者无法在市场快速发生大幅度的不正常的波动中,做出最准确的判断时,通过一段时间的暂停全部或者部分证券交易,可以使投资者有时间消化市场上出现的信息,从而做出判断。大连华讯投资股份有限公司提醒,不同市场针对引发熔断机制后有不同的处理方式,有的是直接暂停交易,有的是转换交易竞价机制,譬如连续竞价调整为集合竞价,或是二者的混合操作。

美国熔断是什么意思?别被营销号骗了,这才是最专业的科普文

正如鲁迅先生在《故乡》中的名言,“世界上本没有路,走的人多了,也便成了路”。疫情期间,各大新闻媒体重复出现的高频词汇就是“美股熔断”。至少在本文发布之前,我们共同经历了四次的美股熔断,如果疫情尚未受控,不排除会经历更多。

股市熔断是什么意思?你知道什么是股市熔断机制吗?

向下有熔断,向上无熔断

只要投资股市,我们就要接受股市存在上涨和下跌的可能性,这些都是正常的市场风险。但股市闪崩则不一样。所谓闪崩,就是整体股市指数在十几分钟甚至几分钟内出现了大幅度的下跌,例如2010年5月道琼斯30指数就在短短几分钟内下跌了9%。

同样面对闪崩,机构投资者和散户的损失是天差地别的。在智能交易程序的协助下,加上机构投资者拥有的快速交易通道,机构投资者通常将会在闪崩出现的60秒之内就已经得知相关的信息和信号,他们的止损机制会发生作用,基本上大规模亏损是不太可能发生,除非交易策略出现了重大的缺陷。

然而,作为一个散户,自然不可能每时每刻关注着市场信息的变化,一旦闪崩发生,等到散户发现了和理解了,机构投资者基本上都跑光了,而散户是没有机会逃生的。任何资本市场,如果制度设计严重偏袒机构投资者,散户肯定会用脚投票,而这个资本市场也将会“先天不足、后天畸形”。

股市熔断是什么意思?你知道什么是股市熔断机制吗?

因此,美国证监会在1987年股灾后,就开始设立美股的熔断机制,来“缓冲”美股的闪崩。务必注意的是,美国证监会从来没有试图“阻止”美股的闪崩(因为这是不可能的),只是试图“缓冲”。

正正是这个原因,美股熔断机制就是“向下有熔断,向上无熔断”。

熔断都不跑,血亏也活该

1987年股灾后,美国证监会设立了基于道琼斯30指数的三级熔断,分别是10%、20%和30%。所谓“熔断”,是指在美股闪崩后,停止交易一段时间或提早休市的机制。

道琼斯30指数,就是覆盖美国市值最大的30家公司的股票,是这些大公司的股票价格的加权平均数。假设当天开盘时道琼斯30指数是10000点,根据1987年设立的熔断机制:

股市熔断是什么意思?你知道什么是股市熔断机制吗?

(1)如果当天的道琼斯指数下跌到9000点,就会触发到靠前级熔断(10%),暂停交易15分钟。

(2)15分钟后恢复交易,如果指数继续下跌,下跌到8000点,就会触发到第二级熔断(20%),暂停交易15分钟。

(3)15分钟后再次恢复交易,如果指数还进一步下跌,下跌到7000点,就会触发到第三级熔断(30%)。这次就不是暂停交易,而是提早收市了。

通常股市闪崩都会发生在经济危机的期间。而财经媒体通常更加会铺天盖地报导各种经济危机的事件。如果是“熔断导致了暂停交易”,这铁定就是财经媒体的头条新闻。按照目前社交媒体的传播速度,基本上5分钟内全部美国人甚至于全地球都知道了。

在美国证监会的如意算盘中,

(1)“暂停交易15分钟”就是为了让散户知道“股市已经出事了,而且是出大事了”(反正机构投资者60秒内就知道了)。

(2)在他们的预想中,散户“应该”在恢复交易后,赶紧止损割肉,远离股市。考虑到散户很可能会很固执,所以在靠前级熔断之后,美国证监会还有第二级熔断。

(3)如果有两次机会跑,然而还有散户不跑,那血亏也活该。

简单讲,美股熔断机制是为了在股市闪崩时让更多散户有机会及时抛售股票,减少损失。

没有效果的原因1:指数代表性不够

但是,在2000年的互联网泡沫破裂、2001年911袭击事件、2007-08年次贷危机,虽然美股暴跌,但依然没有触发熔断机制。最为接近熔断机制的,是在2010年5月道琼斯指数在短短几分钟后暴跌9%,但依然没有触发熔断机制(一级熔断要10%)。

美国国会和民众都开始怀疑美国证监会这套制度究竟能不能有效运作,为什么在关键时刻总是不按照剧本演出。美国证监会事后检讨认为,1987年的剧本已经不适合美国经济和股市,其中有两个原因。

1987年版本,熔断机制是挂钩道琼斯30指数。而后面的几次经济危机中,这30家大公司的股票整体上比较抗跌,没有闪崩,只是其他公司的都跌到怀疑人生。

因此,2012年版本,修订为挂钩标准普尔500指数,这次样本是美国最大的500家上市公司,相对而言更加分散,更加能够反映市场变化。

例如,波音公司的股价暴跌对于道琼斯30指数的影响就很大,但对于标准普尔500指数相对就比较小。

没有效果的原因2:波幅太宽松

在21世纪,尤其是08-09年次贷危机,华尔街投行在股票的基础上建立了很多复杂的金融衍生工具,简单来说就是“加杠杆和加杠杆”:股票价格上下浮动1%已经被放大了2-10倍不等。如果按照1987年的“10%-20%-30%”熔断,不要说散户,连机构投资者可能都尸骨无存。

所以,2012年的重大修订就是,修订了三级熔断为7%、13%和20%。而我们最近经历的四次熔断都是7%的靠前级熔断。不然,美股的金融衍生工具可能都爆炸了。

美股收盘前会很波动

“7%-13%-20%”三级熔断机制,并不是在美股交易时段都适用的。如果散户不了解这点,可能会损失惨重。

美股的交易时段是美国东部时间0930到1600(北京时间2230到0500),而夏令时则提早1小时。在2012年重大修订中,“7%-13%-20%”的熔断是适用于0930-1525的交易时间段,而在“1525-1600”的疯狂时刻只有“20%”的熔断保护。

也就是,在收盘前的最后半小时,无论下跌7%还是13%,都不会熔断的。

因此,机构投资者往往是利用这个制度性窗口来反复收割散户。简单来说,如果中小投资者要跑路,就不应该等到收盘前,否则逃生通道就关闭,就应该为自己的贪婪付出代价。

现货与期货大不同

前面都是关于美股现货的熔断机制,其实美股期货也是有熔断机制的。总体上来说,美股现货和美股期货就是一个互为因果的信号。如果美股期货出现暴跌甚至熔断,当天的美股现货很可能也会暴跌甚至熔断;而美股现货的暴跌或熔断,也会继续影响明天的美股期货。

因此,在逻辑上,如果现货存在熔断机制,但期货不存在熔断机制,这个机制也是无法运作的。不过,两者有着巨大的区别。区别的核心在于,美股指数的期货市场,全部都是专业投资者,足够的贪婪和聪明;而且不需要在美股现货市场需要考虑保护散户。

芝加哥商品交易所每天都为三大美股指数(道琼斯30指数、标准普尔500指数和纳斯达克100指数)会公布一个参考价格。这个参考价格并不是三大指数前一个交易日的指数期货的收市价,而是前一个交易日的指数期货在最后30秒的加权平均价。

在参考价格的基础上,设定了涨跌5%停板制度。无论上涨触及5%,还是下跌触及5%,芝加哥商品交易所均不会暂停交易。因此,任何交易商发布超过5%价格限制的订单是有效订单,但只是无法成交。

所以说,芝加哥商品交易所的美股指数期货,就是在参考价格的上下5%的这个10%波幅内交易。考虑到期货市场以及期货市场的衍生工具的杠杠倍数(2-10倍),10%波幅就足以晚上暴富或晚上倒闭。而在这10%波幅内,是完全没有逃生通道的,跑不掉就是道行不够。

经过长篇大论后,相信大家已经有了更深刻的印象。如果你看到其他人搞不清楚情况,不妨转发这篇科普文章给他们,说不定就是拯救了他们。这次由疫情而引起的全球金融灾难,随之而来的必定就是全球经济衰退,持久时间真的无法预计。

至于是否抄(song)底(si),最后只有五个字赠言:“留得青山在”。

文/何文蔚

你能区分熔断和降级有什么区别吗?

熔断和降级都是系统自我保护的一种机制,但二者又有所不同,它们的区别主要体现在以下几点:

  1. 概念不同
  2. 触发条件不同
  3. 归属关系不同

1.概念不同

1.1 熔断概念

“熔断”一词早期来自股票市场。熔断(Circuit Breaker)也叫自动停盘机制,是指当股指波幅达到规定的熔断点时,交易所为控制风险采取的暂停交易措施。比如 2020 年 3 月 9 日,纽约股市开盘出现暴跌,随后跌幅达到 7% 上限,触发熔断机制,停止交易 15 分中,恢复交易后跌幅有所减缓。

熔断在程序中,表示“断开”的意思。如发生了某事件,程序为了整体的稳定性,所以暂时(断开)停止服务一段时间,以保证程序可用时再被使用。

如果没有熔断机制的话,会导致联机故障和服务雪崩等问题,如下图所示:

1.2 降级概念

降级(Degradation)降低级别的意思,它是指程序在出现问题时,仍能保证有限功能可用的一种机制。

比如电商交易系统在双 11 时,使用的人比较多,此时如果开放所有功能,可能会导致系统不可用,所以此时可以开启降级功能,优先保证支付功能可用,而其他非核心功能,如评论、物流、商品介绍等功能可以暂时关闭。

所以,从上述信息可以看出: 降级是一种退而求其次的选择,而熔断却是整体不可用

2.触发条件不同

不同框架的熔断和降级的触发条件是不同的,本文咱们以经典的 Spring Cloud 组件 Hystrix 为例,来说明触发条件的问题。

2.1 Hystrix 熔断触发条件

默认情况 hystrix 如果检测到 10 秒内请求的失败率超过 50%,就触发熔断机制。之后每隔 5 秒重新尝试请求微服务,如果微服务不能响应,继续走熔断机制。如果微服务可达,则关闭熔断机制,恢复正常请求。

2.2 Hystrix 降级触发条件

默认情况下,hystrix 在以下 4 种条件下都会触发降级机制:

  1. 方法抛出 HystrixBadRequestException
  2. 方法调用超时
  3. 熔断器开启拦截调用
  4. 线程池或队列或信号量已满

虽然 hystrix 组件的触发机制,不能代表所有的熔断和降级机制,但足矣说明此问题。

3.归属关系不同

**熔断时可能会调用降级机制,而降级时通常不会调用熔断机制。**因为熔断是从全局出发,为了保证系统稳定性而停用服务,而降级是退而求其次,提供一种保底的解决方案,所以它们的归属关系是不同(熔断 > 降级)。

题外话

当然,某些框架如 Sentinel,它早期在 Dashboard 控制台中可能叫“降级”,但在新版中新版本又叫“熔断”,如下图所示:

但在两个版本中都是通过同一个异常类型 DegradeException 来监听的,如下代码所示:

所以,在 Sentinel 中,熔断和降级功能指的都是同一件事,也侧面证明了“熔断”和“降级”概念的相似性。但我们要知道它们本质上是不同的,就像两个双胞胎,不能因为他们长得像,就说他们是同一个人。

当用户请求 A、P、H、I 四个服务获取数据时,在正常流量下系统稳定运行,如果某天系统进来大量流量,其中服务 I 出现 CPU、内存占用过高等问题,结果导致服务 I 出现延迟、响应过慢,随着请求的持续增加,服务 I 承受不住压力导致内部错误或资源耗尽,一直不响应,此时更糟糕的是其他服务对 I 有依赖,那么这些依赖 I 的服务一直等待 I 的响应,也会出现请求堆积、资源占用,慢慢扩散到所有微服务,引发雪崩效应。

基本的容错模式

常见的容错模式主要包含以下几种方式:

1.主动超时:Http请求主动设置一个超时时间,超时就直接返回,不会造成服务堆积

2.限流:限制最大并发数

3.熔断:当错误数超过阈值时快速失败,不调用后端服务,同时隔一定时间放几个请求去重试后端服务是否能正常调用,如果成功则关闭熔断状态,失败则继续快速失败,直接返回。(此处有个重试,重试就是弹性恢复的能力)

4.隔离:把每个依赖或调用的服务都隔离开来,防止级联失败引起整体服务不可用

5.降级:服务失败或异常后,返回指定的默认信息

服务降级

由于爆炸性的流量冲击,对一些服务进行有策略的放弃,以此缓解系统压力,保证目前主要业务的正常运行。它主要是针对非正常情况下的应急服务措施:当此时一些业务服务无法执行时,给出一个统一的返回结果。

服务熔断

熔断这一概念来源于电子工程中的断路器(Circuit Breaker)。在互联网系统中,当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时切断对下游服务的调用。

服务熔断与服务降级比较

服务熔断对服务提供了proxy,防止服务不可能时,出现串联故障(cascading failure),导致雪崩效应。

服务熔断一般是某个服务(下游服务)故障引起,而服务降级一般是从整体负荷考虑

1.共性:

目的 -> 都是从可用性、可靠性出发,提高系统的容错能力。

最终表现->使某一些应用不可达或不可用,来保证整体系统稳定。

粒度 -> 一般都是服务级别,但也有细粒度的层面:如做到数据持久层、只许查询不许增删改等。

自治 -> 对其自治性要求很高。都要求具有较高的自动处理机制。

2.区别:

触发原因 -> 服务熔断通常是下级服务故障引起;服务降级通常为整体系统而考虑。

管理目标 -> 熔断是每个微服务都需要的,是一个框架级的处理;而服务降级一般是关注业务,对业务进行考虑,抓住业务的层级,从而决定在哪一层上进行处理:比如在IO层,业务逻辑层,还是在外围进行处理。

实现方式 -> 代码实现中的差异。

服务熔断恢复需注意的问题

如果服务是幂等性的,则恢复重试不会有问题;而如果服务是非幂等性的,则重试会导致数据出现问题。

Java 实现限流

1 滑动窗口

public class WindowLimiterComponent implements LimiterComponent { /** * 队列id和队列的映射关系,队列里面存储的是每一次通过时候的时间戳,这样可以使得程序里有多个限流队列 */ private final Map<String, List<Long>> MAP = new ConcurrentHashMap<>(); /** * 限制次数 */ private final int count; /** * 时间窗口大小 */ private final long timePeriod; public WindowLimiterComponent ( int count, long timePeriod) { this .count = count; this .timePeriod = timePeriod; } /** * 滑动时间窗口限流算法 * 在指定时间窗口,指定限制次数内,是否允许通过 * * @param id 队列id * @return 是否被限流 */ @ Override public synchronized boolean isLimited (String id) { // 获取当前时间 long nowTime = System.currentTimeMillis(); // 根据队列id,取出对应的限流队列,若没有则创建 List<Long> list = MAP.computeIfAbsent(id, k -> new LinkedList<>()); // 如果队列还没满,则允许通过,并添加当前时间戳到队列开始位置 if ( list .size() < count) { list .add( 0 , nowTime); return false ; } // 队列已满(达到限制次数),则获取队列中最早添加的时间戳 Long lastTime = list .get(count - 1 ); // 用当前时间戳 减去 最早添加的时间戳 if (nowTime - lastTime <= timePeriod) { // 若结果小于等于timePeriod,则说明在timePeriod内,通过的次数大于count // 不允许通过 return true ; } else { // 若结果大于timePeriod,则说明在timePeriod内,通过的次数小于等于count // 允许通过,并删除最早添加的时间戳,将当前时间添加到队列开始位置 list .remove(count - 1 ); list .add( 0 , nowTime); return false ; } }} 复制代码

@Test public void test () throws InterruptedException { // 任意10秒内,只允许2次通过 LimiterComponent component = new WindowLimiterComponent( 2 , 10000L ); while ( true ) { System.out.println(LocalTime.now().toString() + component.isLimited( "1" )); // 睡眠0-10秒 Thread.sleep( 1000 * new Random().nextInt( 10 )); } } 复制代码

2 redis zset

public class RedisZSetLimiterComponent implements LimiterComponent { private final RedissonComponent redissonComponent; /** * 限制次数 */ private final int count; /** * 时间窗口大小,单位毫秒 */ private final long timePeriod; public RedisZSetLimiterComponent (RedissonComponent component) { this .redissonComponent = component; this .count = 5 ; this .timePeriod = 1000 ; } public RedisZSetLimiterComponent (RedissonComponent component, int count, long timePeriod) { this .redissonComponent = component; this .count = count; this .timePeriod = timePeriod; } /** * 基于 zset 的滑动时间窗口限流算法 * 在指定时间窗口,指定限制次数内,是否允许通过 * * @param key 队列key * @return 是否允许通过 */ @ Override public synchronized boolean isLimited (String key) { // 获取当前时间 long nowTime = System.currentTimeMillis(); RScoredSortedSet<String> set = redissonComponent.getRScoredSortedSet(key); // 移除一个时间段以前的 set .removeRangeByScore( 0 , true , ( double ) (nowTime - timePeriod), true ); // 获取集合内元素总数 int size = set .count(( double ) (nowTime - timePeriod), true , nowTime, true ); // 如果队列没满 if (size < count) { // 当前时间加入集合 set .add(( double ) nowTime, String.valueOf(nowTime)); return false ; } return true ; }} 复制代码

@Test public void test () throws InterruptedException { // 任意10秒内,只允许2次通过 LimiterComponent component = new RedisZSetLimiterComponent(redissonComponent, 2 , 10000L ); while ( true ) { System.out.println(LocalTime.now().toString() + component.isLimited( "1" )); // 睡眠0-10秒 Thread.sleep( 1000 * new Random().nextInt( 10 )); } } 复制代码

3 guava RateLimiter

@SuppressWarnings ( "UnstableApiUsage" ) public class GuavaLimiterComponent implements LimiterComponent { private final int count; private final long timePeriod; private final Map<String, RateLimiter> MAP = new ConcurrentHashMap<>(); public GuavaLimiterComponent ( int count, long timePeriod) { this .count = count; this .timePeriod = timePeriod; } /** * 令牌桶算法 * * @param key 键值 * @return 是否被限流 */ @Override public synchronized boolean isLimited (String key) { RateLimiter rateLimiter = MAP.computeIfAbsent(key, k -> RateLimiter.create(count, timePeriod, TimeUnit.MILLISECONDS)); return !rateLimiter.tryAcquire(); }} 复制代码

@Test public void test () throws InterruptedException { // 任意10秒内,只允许2次通过 LimiterComponent component = new GuavaLimiterComponent( 2 , 10000L ); while ( true ) { System.out.println(LocalTime.now().toString() + component.isLimited( "1" )); // 睡眠0-10秒 Thread.sleep( 1000 * new Random().nextInt( 10 )); } } 复制代码

4 redisson RRateLimiter

public class RedisRateLimiterComponent implements LimiterComponent { private final RedissonComponent redissonComponent; /** * 限制次数 */ private final int count; /** * 时间窗口大小,单位毫秒 */ private final long timePeriod; public RedisRateLimiterComponent (RedissonComponent component) { this .redissonComponent = component; this .count = 5 ; this .timePeriod = 1000 ; } public RedisRateLimiterComponent (RedissonComponent component, int count, long timePeriod) { this .redissonComponent = component; this .count = count; this .timePeriod = timePeriod; } /** * 基于 rateLimiter 的滑动时间窗口限流算法 * 在指定时间窗口,指定限制次数内,是否允许通过 * * @param key 队列key * @return 是否允许通过 */ @Override public synchronized boolean isLimited (String key) { RRateLimiter rateLimiter = redissonComponent.getRateLimiter(key); rateLimiter.trySetRate(RateType.PER_CLIENT, count, timePeriod, RateIntervalUnit.MILLISECONDS); return !rateLimiter.tryAcquire(); }} 复制代码

@Test public void test () throws InterruptedException { // 任意10秒内,只允许2次通过 LimiterComponent component = new RedisRateLimiterComponent(redissonComponent, 2 , 10000L ); while ( true ) { System.out.println(LocalTime.now().toString() + component.isLimited( "1" )); // 睡眠0-10秒 Thread.sleep( 1000 * new Random().nextInt( 10 )); } }

总结

以上就是股市熔断是什么意思?你知道什么是股市熔断机制吗?的详细内容,希望通过阅读小编的文章之后能够有所收获!更多请关注壹榜财经其它相关文章!

版权:本文由用户自行上传,观点仅代表作者本人,本站仅供存储服务。如有侵权,请联系管理员删除,了解详情>>

发布
问题