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

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

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

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

典型回答

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

Redis 如何实现限流功能?相关推荐

  1. Java互联网架构-如何设计服务接口API限流功能

    API 概念的出现,远远早于个人计算机的诞生,更不用说网络的诞生了.在公用数据处理的早期,为了一个应用能够与其它系统交互,开发者便已开始设计可公开访问并描述清晰的"接入点".早在那 ...

  2. 基于Redis的分布式限流详解

    前言 Redis除了能用作缓存外,还有很多其他用途,比如分布式锁,分布式限流,分布式唯一主键等,本文将和大家分享下基于Redis分布式限流的各种实现方案. 一.为什么需要限流 用最简单的话来说:外部请 ...

  3. Alibaba Sentinel限流功能

    以下文章来源方志朋的博客,回复"666"获面试宝典 前言 上周经历了合作方未按照约定在客户端进行缓存,以高QPS调用我这边某个接口的问题,当时带来的影响是接口RT变高,当时如果QP ...

  4. 快速体验 Sentinel 集群限流功能,只需简单几步

    ️ Pic by Alibaba Tech on Facebook 集群限流 可以限制某个资源调用在集群内的总 QPS,并且可以解决单机流量不均导致总的流控效果不佳的问题,是保障服务稳定性的利器. S ...

  5. redis rua解决库存问题_库存秒杀问题-redis解决方案- 接口限流

    /** * Created by PhpStorm. * redis 销量超卖秒杀解决方案 * redis 文档:http://doc.redisfans.com/ * ab -n 10000 -c ...

  6. redis笔记2 限流、GeoHash和Scan

    限流 简单限流 简单限流的思路是,在规定的时间窗口内,给出规定的最大操作数量限制.使用zset结构作为一个用户行为的记录.zset的value和score都用来表示操作的时间戳.每次操作前,先把操作时 ...

  7. Redis做接口限流

    Redis 除了做缓存,还能干很多很多事情:分布式锁.限流.处理请求接口幂等性...太多太多了-,今天想和小伙伴们聊聊用 Redis 处理接口限流. 1. 准备工作 首先我们创建一个 Spring B ...

  8. Redis实现分布式限流(学习笔记

    Redis实现分布式限流(学习笔记2022.07.09) 前言: 以下实现都是基于: spring-boot-starter-web + spring-boot-starter-data-redis ...

  9. Redis 做接口限流

    Redis 除了做缓存,还能干很多很多事情:分布式锁.限流.处理请求接口幂等性...太多太多了- 今天想和小伙伴们聊聊用 Redis 处理接口限流,这也是最近的 TienChin 项目涉及到这个知识点 ...

最新文章

  1. android获取string.xml的值(转)
  2. apache的斜杠问题
  3. 校门外的树——树状数组+区间修改
  4. c语言偶数分解成两个素数,如何用C语言验证2000以内的哥德巴赫猜想,对于任何大于4的偶数均可以分解为两个素数之和....
  5. 大厂开发“大牛”,你距离他们有多远?
  6. ubuntu 下安装 phpmyadmin 过程记录
  7. 【LeetCode】【数组】题号:*448,没有出现数组中的数字
  8. SQLite数据库的使用——利用命令行或Navicat Premium创建数据库
  9. laravel mysql 悲观锁_Laravel中悲观锁 乐观锁的使用
  10. 进博会高端自行车领导品牌辐轮王盛赞第三届进博会精彩而富有成效
  11. FPGA下载方式AS.PS,JTAG对比
  12. 2022-2028全球造水机市场现状及未来发展趋势
  13. 7-1 人民币与美元汇率兑换程序 (10分)
  14. android毕业论文致谢,毕业论文致谢10篇(精选)
  15. MATLAB 设置msgbox若干秒后自动关闭
  16. python自动登录校园网_python实现校园网一键自动连接
  17. 米兰兄弟气质引起的思考--我的感触是深省
  18. 分布式架构之网络通信
  19. C++检测内存泄漏方法
  20. 考研概率论--87年真题--MATLAB暴力求解

热门文章

  1. 线粒体和叶绿体的基因组特点_如何组装植物叶绿体基因组
  2. iphone怎样关闭副屏_小米新设计专利曝光:“Z”型折叠屏手机
  3. 【Java从入门到头秃专栏 7】语法篇(六) :Lambda表达式(->) 方法引用(::) stream流
  4. 神经网络加载数据 自建数据集 官方数据集 pytorch 显示数据集
  5. spring入门到放弃——spring事务管理
  6. 学习笔记-JMeter 进行接口压力测试
  7. [C#学习] DataAdapter.Fill()分页
  8. Spark 独立部署模式
  9. POJ 3422 费用流
  10. Mac OSX 安装nvm(node.js版本管理器)