关于股票什么是熔断很多人还不了解,今天小编就为大家整理了相关内容,希望对各位有所帮助:
3月18日,美股因标普500指数盘中跌超7%,再次触发熔断机制,暂停交易15分钟,为美股史上第五次熔断,10天内第四次熔断。此前,3月9日、3月12日、3月16日,美国股市已发生三次暴跌熔断,这三天道琼斯指数的跌幅分别达到7.8%、10.0%、12.9%,一次比一次跌得狠。接下来具体说说熔断是什么
股票熔断也成熔断机制。
也叫自动停盘机制。
是指当股指波幅达到规定的熔断点时。
交易所为控制风险而采取的暂停交易的措施。
具体来说是对某一合约在达到涨停之前设置一个熔断价格。
使合约买卖报价在一段时间内只能在这一价格范围内交易的机制。
例如:沪深300涨跌幅超过5%,不到7%时。
暂停交易15分钟。
不过在14:45及之后触发5%熔断阈值,暂停交易至收市。
美国内部的影响:
据 美股研究社 报道,美股下跌后,导致很多美国企业破产,直接影响到许多美国家庭的生活,而当美国家庭收入受到影响,就会减少消费和投资, 届时,对美国经济冲击是挺大的 。首先, 美国企业的债务已经达到*高,已经超过2008年债务危机时期,之前企业债务问题不大,是依托于企业的股票的持续上涨,如果企业股票持续重挫,那企业有破产和倒闭的风险,届时员工都要失业回家。
再者, 美股如果出现暴跌,会使投资者损失惨重,就会减少消费和投资, 而当大家减少消费和投资时,美国多数企业盈利就会进一步下跌,这时候企业间再恶性竞争,很多企业就无法生存下来。最后,股市暴跌很容易引发股票质押危机。如果暴跌之后,股票被强行平仓,那么还会引发股市的第二轮暴跌, 届时很多企业因为债务危机而被迫破产,最怕的是企业破产,影响到美国家庭的就业和收入。
美股熔断对中国的影响:
一、出口
此轮全球股市连环暴跌,甚至出现美股熔断的结果。这种结果是多方面原因造成的,同时美股熔断会导致相当多外资离场,同时加剧全球金融波动,对于中国的出口会是一个不小的打击。
二、人民币
在中国很好的控制疫情且美股熔断的情况下,不排除世界各国会有疯狂抛售美元买进人民币。到时候中国宣布由于美元币值波动太大,影响企业定价,即日起中国全部进出口贸易可能都用人民币结算。
三、职工
受到新冠疫情冲击,全球股市连环暴跌,美股更出现熔断的结果。此次变化会使得美国公司撤回在国内的投资,这就意味着失去这些资金支持的公司会倒闭。那么在这种情况下,职工就得准备好充沛的现金流,防止失业。而且要要留足空间,防止两三个月找不到工作。
上述就是美股熔断对中国的影响,不能否认的是,美股熔断对于全球来说,是一次浩劫。美国股市的崩盘,会使得美元资产贬值,会使那些持有美元资产的个人财富受损,社会财富缩水。
在经济全球化的当下,中国很难不收到影响,加之国内疫情造成的停工之久,国民的收入及购买力受到了大幅的影响。
近九旬高龄的股神巴菲特
一辈子看见的美股五次熔断
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万亿元美元的经济刺激法案。这份也是美国史上最大规模的刺激经济法案。
3月18日,美股因标普500指数盘中跌超7%,再次触发熔断机制,暂停交易15分钟,为美股史上第五次熔断,10天内第四次熔断。此前,3月9日、3月12日、3月16日,美国股市已发生三次暴跌熔断,这三天道琼斯指数的跌幅分别达到7.8%、10.0%、12.9%,一次比一次跌得狠。
3月23日美股三大股指期货低开后跌幅扩大,均跌超5%,触及熔断限制。截至发稿,道指期货跌5.01%,标普500指数期货跌5%,纳指期货跌4.88%。
连现在89岁的股神巴菲特都觉得2020年很神奇,而网友更是说巴菲特活了89岁经历了五次熔断,而自己只花了半个月就历经了美股的四次暴跌熔断。
那么,什么是“三大股指”,什么是“熔断”呢,就让我们一起来探究探究吧。
考点1:三大股指
三大股指是指纽约、欧洲等地的三种主要股票指数。对于全球的股票都有重大的影响。
一、欧洲三大股指
1. 英国富时100,又称伦敦金融时报100指数、伦敦金融时报指数等。自1984年起,特别挑选在伦敦证券交易所交易的100种股票,其成分股涵盖欧陆9个主要国家,以英国企业为主,其他国家包括德国、法国、意大利、芬兰、瑞士、瑞典、荷兰及西班牙。该指数是英国经济的晴雨表,也是欧洲最重要的股票指数之一。
2. 德国法兰克福指数,又叫DAX指数,是德国重要的股票指数。由德意志交易所集团推出的一个蓝筹股指数。该指数中包含有30家主要的德国公司。
3. 法国CAC40股价指数,由40只法国股票构成。该指数从1988年6月5日开始发布,反映法国证券市场的价格波动。
二、纽约三大股指
1. 道琼斯指数
一种算术平均股价指数。道琼斯指数是世界上历史最为悠久的股票指数,它的全称为股票价格平均指数。道琼斯指数最早是在1884年由道琼斯公司的创始人查理斯·道开始编制的。它是世界上最有影响、使用最广的股价指数。它以在纽约证券交易所挂牌上市的一部分有代表性的公司股票作为编制对象,由四种股价平均指数构成。
2. 标准普尔500指数
标准普尔500指数,英文简写为S&P 500 Index,是记录美国500家上市公司的一个股票指数。这个股票指数由标准普尔公司创建并维护。
3. 纳斯达克指数
又称纳指、美国科技指数。纳斯达克的特点是收集和发布场外交易非上市股票的证券商报价。它现已成为全球最大的证券交易市场之一。目前的上市公司有5200多家。纳斯达克又是全世界靠前个采用电子交易的股市,它在55个国家和地区设有26万多个计算机销售终端。
纳斯达克综合指数是反映纳斯达克证券市场行情变化的股票价格平均指数,基本指数为100。纳斯达克的上市公司涵盖所有新技术行业,包括软件和计算机、电信、生物技术、零售和批发贸易等。主要由美国的数百家发展最快的先进技术、电信和生物公司组成,包括微软、英特尔、美国在线、雅虎这些家喻户晓的高科技公司,因而成为美国“新经济”的代名词。
考点2:熔断机制
一、什么是熔断机制
“熔断机制”又名自动停盘机制,指的是当股指波幅达到某一个点时,自动停止交易一段时间,以控制风险。因为同“保险丝”在电流过大时自动熔断起到的保护作用相似而得名。
二、美股熔断机制
1988年10月19日,美国商品期货交易委员会与证券交易委员会批准了纽约股票交易所和芝加哥商业交易所的熔断机制。此后,熔断机制一直持续至今。
最开始美国熔断机制的基准指数是道琼斯工业指数,后来修改为标准普尔500指数。
在美股交易时段,熔断机制可以分为三级。一级市场熔断,是指市场下跌达到7%;二级市场熔断,是指市场下跌达到13%;三级市场熔断,是指市场下跌达到20%。
如果触发一级或者二级市场熔断,且时间是在:美东时间9:30-15:25(含)之间,全市场所有股票暂停交易15分钟。美东时间15:25之后,不暂停交易。另外,如果该交易日为半天交易,则时间分界点为12:25。全天任意交易时段,如果触发三级市场熔断,全市场停止交易,直至下个交易日开盘。
三、历史熔断
1987年10月19日 (星期一),道琼斯工业平均指数大幅下跌508点(逾20%)。因为没有熔断机制的保护,许多人损失惨重,这天被股民称作:黑色星期一。
1997年10月27日,当时道琼斯工业指数暴跌7.18%。这一天,也是熔断机制在1988年引入之后靠前次被触发。
试题练习:
1. 纽约三大股指不包括( )
A. 道琼斯指数
B. 标准普尔500指数
C. DAX指数
D. 纳斯达克指数
【答案】C
【解析】纽约三大股指包括道琼斯指数、标准普尔500指数、纳斯达克指数。恒生指数是香港股市价格的重要指标,指数由若干只成份股(即蓝筹股)市值计算出来的,代表了香港交易所所有上市公司的12个月平均市值涵盖率的63%。故本题选择C项。
2. 美国熔断机制的基准指数是( )
A. 道琼斯指数
B. 标准普尔500指数
C. 恒生指数
D. 纳斯达克指数
【答案】B
这个国家的汇市、股市、债市今天全崩盘了!
当地时间3月22日,土耳其货币里拉一度暴跌15%,土耳其伊斯坦堡100指数触发熔断,土耳其10年期国债收益率创历史最大涨幅……
土耳其货币直线跳水,股市触发熔断
周一,土耳其里拉的波动剧烈,里拉对美元汇率从7.2比1一度跌至8.485比1,接近历史最低水平。后里拉小幅升值,截至发稿,里拉对美元汇率为7.98比1,仅仅4个小时内美元就对里拉升值了11%。
土耳其的股市也遭遇重挫,土耳其伊斯坦堡指数开盘即大跌6.65%,触发熔断机制,一直熔断至当地时间上午10时30分。然而10时30分股市恢复交易之后,依旧大跌,跌至7%,再次触发熔断机制,截至当天12时20分,伊斯坦堡指数跌幅达到9.5%,如果当天跌幅扩大至10%,将启动第三次熔断。这也是土耳其股市2020年10月引入熔断机制以来首次触发熔断。
伊斯坦布尔证券交易所表示,整个市场的熔断机制已经触发,股票市场、衍生品市场的股票和股票指数合约以及债务证券股票回购市场的交易暂停。
土耳其国债价格也大幅下跌,收益率暴涨。土耳其10年期国债收益率从上周五的14.06%升至17.25%,创历史最大涨幅。
数据显示,截至今年2月,土耳其年化通胀率已升至15.6%,里拉对美元汇率与2018年年初相比贬值逾50%。
市场巨震由土耳其央行被免职引发
据央视财经,分析人士称,土耳其原央行行长阿巴尔遭解职是里拉暴跌的主要原因。
当地时间3月20日凌晨,土耳其政府发布由总统埃尔多安签名的官方公告,宣布任命卡夫哲奥卢为新任土耳其央行行长,前行长阿巴尔被解职。
据悉,阿巴尔被解职,被认为与加息有关。当天,土耳其央行宣布将基准利率从17%提高至19%,加息力度是市场预期的两倍。事实上,自阿巴尔去年11月上任以来,土耳其央行一直在大幅加息以遏制通胀。土耳其央行去年11月将基准利率从10.25%上调至15%,随后又在12月将利率上调至17%。
分析认为,提高基准利率可以遏制通货*胀和防止货币贬值。
新上任的土耳其央行行长卡夫奇奥卢表示,土耳其央行将维持当前货币政策,未来任何政策变化都将以通胀缓解为目标。
值得注意的是,这已经是两年内第三位被解职的土耳其央行行长了。
2019年7月,土耳其总统埃尔多安发布总统令,解除央行行长Murat Cetinkaya的职务,总统令没有说明解除职务的原因;第二任行长Murat Uysal则在就任16个月内多次降息,在2020年11月被解职。
土耳其股汇债三杀后怎么走?
机构预计,鉴于土耳其新任央行行长的鸽派乃至非正统的观点,以及央行的信誉遭到的最新损害,新一周金融市场开盘后,里拉和土耳其资产将重挫。
英国凯投国际宏观经济咨询公司分析师指出,阿巴尔在任上帮助重建了土耳其央行的信誉,如今惨遭解雇可能会引发里拉汇率的大幅下跌。道明证券策略师认为,未来几天里拉将贬值10%-15%。
对于土耳其经济,高盛预计,土耳其央行将出现“更超前的降息周期”,此前预测将在第四季度进行首次降息。不过土耳其的通胀将限制短期内该央行的鸽派降息举措,预计到年底通胀达12.5%。摩根大通则表示,目前不会改变对土耳其的任何预测,预计9月将降息100个基点,并将关注央行的指引和数据。
新兴市场加息周期开启?
在美联储继续维持超低利率的背景下,近期巴西、土耳其、俄罗斯等新兴市场央行却纷纷宣布加息,引发了市场关注。分析认为,三国央行加息与其通胀高企等有关。
熔断和降级都是系统自我保护的一种机制,但二者又有所不同,它们的区别主要体现在以下几点:
“熔断”一词早期来自股票市场。熔断(Circuit Breaker)也叫自动停盘机制,是指当股指波幅达到规定的熔断点时,交易所为控制风险采取的暂停交易措施。比如 2020 年 3 月 9 日,纽约股市开盘出现暴跌,随后跌幅达到 7% 上限,触发熔断机制,停止交易 15 分中,恢复交易后跌幅有所减缓。
而 熔断在程序中,表示“断开”的意思。如发生了某事件,程序为了整体的稳定性,所以暂时(断开)停止服务一段时间,以保证程序可用时再被使用。
如果没有熔断机制的话,会导致联机故障和服务雪崩等问题,如下图所示:
降级(Degradation)降低级别的意思,它是指程序在出现问题时,仍能保证有限功能可用的一种机制。
比如电商交易系统在双 11 时,使用的人比较多,此时如果开放所有功能,可能会导致系统不可用,所以此时可以开启降级功能,优先保证支付功能可用,而其他非核心功能,如评论、物流、商品介绍等功能可以暂时关闭。
所以,从上述信息可以看出: 降级是一种退而求其次的选择,而熔断却是整体不可用 。
不同框架的熔断和降级的触发条件是不同的,本文咱们以经典的 Spring Cloud 组件 Hystrix 为例,来说明触发条件的问题。
默认情况 hystrix 如果检测到 10 秒内请求的失败率超过 50%,就触发熔断机制。之后每隔 5 秒重新尝试请求微服务,如果微服务不能响应,继续走熔断机制。如果微服务可达,则关闭熔断机制,恢复正常请求。
默认情况下,hystrix 在以下 4 种条件下都会触发降级机制:
虽然 hystrix 组件的触发机制,不能代表所有的熔断和降级机制,但足矣说明此问题。
**熔断时可能会调用降级机制,而降级时通常不会调用熔断机制。**因为熔断是从全局出发,为了保证系统稳定性而停用服务,而降级是退而求其次,提供一种保底的解决方案,所以它们的归属关系是不同(熔断 > 降级)。
当然,某些框架如 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层,业务逻辑层,还是在外围进行处理。
实现方式 -> 代码实现中的差异。
如果服务是幂等性的,则恢复重试不会有问题;而如果服务是非幂等性的,则重试会导致数据出现问题。
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
));
}
}
以上就是股票什么是熔断?熔断是什么?的详细内容,希望通过阅读小编的文章之后能够有所收获!更多请关注壹榜财经其它相关文章!