Redis 如何实现限流功能?

“限流”这种事在生活中很常见,比如逢年过节时景点的限流,还有工作日的车辆单双号限流等,有人可能会问为什么要限流?我既然买了车子你还不让我上路开?还有我倒景点买了门票,景点不是能赚更多的钱吗?为什么要限流呢?

其实限流的主要目的就是为了保证整个系统的正常运行,比如以车辆限流为了,它的作用主要有两个,一个是为了保证我们生存空间的资源少受污染,尤其是近几年雾霾已经越来越严重了,如果不采取相应的手段会导致生态系统更加恶化,第二,目前车辆的增长速度已经远远的超过了市政道路的新建速度,尤其是上班的时候大家都在赶时间,如果车流量太大的话就会造成严重的交通拥堵,那么导致的直接后果就是大家上班都会迟到,为了解决这个问题所有需要限行。包括北上广深从几年前已经开始买车要摇号了,其实也是一种限流的手段,目的就是为了更好的保证我们整个系统的正常运行。

回到程序的这个层面也是一样,假设我们的系统只能为 10 万人同时提供购物服务,但是某一天因为老罗带货突然就涌进了 100 万用户,那么导致的直接后果就是服务器瘫痪,谁也甭想买东西了,所以这个时候我们需要“限流”的功能保证先让一部分用户享受购物的服务,而其他用户进行排队等待购物,这样就可以让整个系统正常的运转了。

我们本文的面试题是,使用 Redis 如何实现限流功能?

典型回答

我们可以使用 Redis 中的 ZSet(有序集合)加上滑动时间算法来实现简单的限流。所谓的滑动时间算法指的是以当前时间为截止时间,往前取一定的时间,比如往前取 60s 的时间,在这 60s 之内运行最大的访问数为 100,此时算法的执行逻辑为,先清除 60s 之前的所有请

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/545346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第三四五章(PTA复习)

第三四五章类的构造与继承异常线程类的构造与继承 加 final 唯一可以说明的是该类不可被继承,另外和其它类是一样的 abstract类是抽象类,必须要被继承才能实现,而final修饰的类不能被继承 异常 由于未捕获到异常,所以执行完final…

switch(封装)

#迭代器class switch(object):def __init__(self,value):self.valuevalueself.fallFalse#迭代器方法def __iter__(self):yield self.matchraise StopIterationdef match(self,*args):if self.fall or not args:return Trueelif self.value in args:self.fallTruereturn Trueels…

stl max函数_C ++ STL中带有示例的array :: max_size()函数

stl max函数C STL array :: max_size()函数 (C STL array::max_size() function) max_size() function is a library function of array and it is used to get maximum size of an array. It returns the total number of elements that an array can hold. max_size()函数是…

Redis 属于单线程还是多线程?不同的版本有什么区别?

Redis 是普及率最高的技术之一,同时也是面试中必问的一个技术模块,所以从今天开始我们将从最热门的 Redis 面试题入手,更加深入的学习和了解一下 Redis。 我们本文的面试题是 Redis 属于单线程还是多线程? 典型回答 本文的问题…

英语笔记:词组句子:0906

income 收入 mostly 大部门 particularly 尤其、特别 larger drops 更大幅度的下降 thanks to 由于 liable to 易于、可能 in terms of 在……方面 in view of 鉴于、考虑到 over time 随着时间过去 against time 争分夺秒 on time 准时 behind time 误期 widening…

【原创】STM32下波特率计算详解

波特率的计算STM32下的波特率和串口外设时钟息息相关,USART 1的时钟来源于APB2,USART 2-5的时钟来源于APB1。在STM32中,有个波特率寄存器USART_BRR,如下: STM32串口波特率通过USART_BRR进行设置,STM32的波特…

java对数组进行排序_用Java对数组进行排序所需的最少交换

java对数组进行排序Problem: 问题: In this problem, we would have an unordered array with consecutive distinct natural numbers [1,2,3,..n], where n is the size of the array. We have to find the minimum number of swaps required to sort the array i…

如何实现查询附近的人?

查询附近的人或者是附近的商家是一个实用且常用的功能,比如微信中“附近的人”或是美团外卖中“附近商家”等,如下图所示: 那它是如何实现的呢?我们本文就一起来看。 我们本文的面试题是,使用 Redis 如何实现查询附近的人? 典型回答 在说如何实现地理位置查询之前,首…

英语笔记:词组句子:0712

Define sth as … 定义为…… Tie sth to sth 制约 Derive from源自于 Descend from 从……承袭下来 Divide from 分开、隔开 Distinguished from 区别于 Related to 与……有联系 Refer to 查阅、涉及 Attach to 附在……上、系在……上 Associate with 与……有联系…

第五六七章(PTA复习)

第五六七章图形界面线程IO图形界面 主要的布局管理器类包括流布局(FlowLayout)、边界布局(BorderLayout)、网格布局(GridLayout)、卡 片 布 局 (CardLayout) 、 网 格 包 布 局(CardBagLayout) 线程 答案:B IO

Eclipse jetty和plugin 的结合使用

Jetty做为一个轻量级的J2EE Web application server,它不仅小巧,而且性能也比较稳定,效率也挺高,现在也越来越得到广泛的应用。特别是eclipse平台集成了Jetty Plugin后,更是对RCP整合Web Server开发提供了极大的方便。…

python布尔运算符_Python中布尔的逻辑和按位NOT运算符

python布尔运算符In python, not is used for Logical NOT operator, and ~ is used for Bitwise NOT. Here, we will see their usages and implementation in Python. 在python中, not用于逻辑NOT运算符,而〜用于按位NOT。 在这里,我们将看…

英语笔记:作文:What elective to choose

What elective to choose 选修课的选择 Nowadays, thereexist a wide range of selective courses in college which are ready for theundergraduates to choose from. These courses make the students’ college lifemore colorful. However, as for the purpose of choosi…

Redis 有哪些数据类型?

Redis 的数据类型可谓是 Redis 的精华所在,同样的数据类型,例如字符串存储不同的值对应的实际存储结构也是不同,当你存储的 int 值是实际的存储结构也是 int,如果是短字符串(小于 44 字节)实际存储的结构为…

导出/入数据库

导出/入数据库1、以SQL文件的方式1.1导出1.2 导入2、以mdf和ldf数据库文件的方式2.1导出2.1.1 脱机2.1.2 到数据库的数据路径,拷贝出mdf,ldf文件2.1.3 将原数据库设置为online状态即可正常使用2.2导入数据库(切记导入之前要先将控制权限打开)…

arm中clz指令_JavaScript中带有示例的Math.clz32()方法

arm中clz指令JavaScript | Math.clz32()方法 (JavaScript | Math.clz32() Method) Math.clz32() is a function in math library of JavaScript that is used to find the number of leading zeroes in the 32-bit representation of the number. The method will return the n…

Oracle 创建用户 scott 例

在OracleXE中创建scott用户1、打开SQL*Plus,以 sys用户登录数据库 connect / as sysdba2、依次执行下面命令 --DROP USER scott CASCADE; CREATE USER scott IDENTIFIED BY tiger; GRANT connect,resource TO scott; GRANT CREATE DATABASE LINK, CREATE MATERIALIZ…

第八章Transact-SQL程序设计

第八章Transact-SQL程序设计8.1_变量8.1.1_局部变量8.1.2_全局变量8.2_流程控制语句8.2.1_IF...ELSE语句8.2.2_while循环语句8.1_变量 8.1.1_局部变量 局部变量的声明定义: Declare Variable_name Datatype[, Variable_name Datatype]…--举例: decla…

Redis 如何处理已经过期的数据?

上一篇我们讲了 Redis 内存用完之后的内存淘汰策略,它主要是用来出来异常情况下的数据清理,而本文讲的是 Redis 的键值过期之后的数据处理,讲的是正常情况下的数据清理,但面试者常常会把两个概念搞混,以至于和期望的工作失之交臂。我们本文的职责之一就是帮读者朋友搞清楚…

如何删除多余系统引导项

我们很多人都装过双系统,但是有时候装的当中却不想装了或者装不成功,生成的多余系统引导项怎么删除呢?下面分享下我的经验:win7(XP)下如何删除多余的系统引导项。关键词:删除多余系统引导项&…