限流的意义

限流一般是指在一个时间窗口内对某些操作请求的数量进行限制,比如一个论坛限制用户每秒钟只能发一个帖子,每秒钟只能回复5个帖子。限流可以保证系统的稳定,限制恶意请求,防止因为流量暴增导致系统瘫痪宕机。

常用的限流算法有:滑动窗口、漏斗以及令牌桶。

得益于redis的数据结构特点,redis实现滑动窗口限流和漏斗限流的非常的便捷。

滑动窗口限流的原理和实现

以xx论坛限制用户行为为例子,比如一秒内进行某个操作50次,这种行为应该进行限制。

滑动窗口就是记录一个滑动的时间窗口内的操作次数,操作次数超过阈值则进行限流。

网上找的图:

在redis中可以用zset数据结构来实现这个功能:

用唯一的id作为zset的key,可以是user_id + action_key ,value是当前操作的时间戳。每次新的操作请求进来时,先判断当前时间窗口内记录的操作次数 count,小于阈值max则允许进行操作,超过阈值则进行限流。同时对时间窗口之外的数据进行清理,节省内存。

简单代码实现:

public boolean isActionAllowed(String userId, String actionKey, int period, int maxCount) {

// 生成唯一的key

S

java redis 限流_Redis——限流算法之滑动窗口、漏斗限流的原理及java实现相关推荐

  1. 微服务限流及熔断一:四种限流算法(计数器算法、滑动窗口算法、令牌限流算法、漏桶限流算法)

    引言 本篇内容根据<spring cloud alibaba 微服务原理与实战>中内容摘取,希望和大家分享限流的思想,本篇不涉及代码层面的实现. 限流的目的 目的:通过限制并发访问数或者限 ...

  2. 简单介绍4种限流算法!(固定窗口计数器算法、滑动窗口计数器算法、漏桶算法、令牌桶算法)...

    作者:架构小菜 链接:https://www.jianshu.com/p/7987bf427b5b 简单介绍 4 种非常好理解并且容易实现的限流算法! 一.固定窗口计数器算法 规定我们单位时间处理的请 ...

  3. 限流算法之----滑动窗口

    关于限流算法有许多种,有简单的计数限流阀,固定窗口限流法,滑动窗口限流法,漏桶算法,令牌桶算法.今天我们就来聊聊滑动窗口版的限流算法. 说起滑动窗口之前,我们先来说说固定窗口限流.固定窗口限流,我们可 ...

  4. 【算法】 - 滑动窗口

    1. 题目链接 2. 分析 最多可以将K个值从0变成1,因此滑动窗口的限制条件: 0的数量(zeros)小于K,算法过程如下 有一个滑动窗口(slipper),每次都会从A中读入一个数 当读入的数为0 ...

  5. java redis 网络断开_Redis长时间连接后自动断开

    从日志看2小时 [DEBUG] 22:02:48.206 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:151) - Get 'emailAlertService' ...

  6. java redis释放连接_redis在应用中使用连接不释放问题解决

    今天测试,发现redis使用的时候,调用的链接一直不释放.后查阅蛮多资料,才发现一个配置导致的.并不是他们说的服务没有启动导致的. 1)配置文件 #redis连接配置================= ...

  7. java redis工具类_redis Java工具类详解

    redis 工具 [Java]代码 private static ShardedJedisPool sharedJedisPool; public synchronized static void i ...

  8. java redis缓存使用_redis缓存在项目中的使用

    关于redis为什么能作为缓存这个问题我们就不说了,直接来说一下redis缓存到底如何在项目中使用吧: 1.redis缓存如何在项目中配置? 1.1redis缓存单机版和集群版配置?(redis的客户 ...

  9. java redis事务机制_Redis 事务机制

    Redis 事务:可以一次执行多个命令,本质是一组命令的集合.一个事务中的所有命令都会序列化,按顺序串行化执行而不会被其它命令插入,一次性.顺序性.排他性的执行一系列命令. 一.常用命令 [1] :开 ...

最新文章

  1. AFN post的数据编码格式问题
  2. POJ 1459 -- Power Network(最大流, 建图)
  3. 初入WEBOTS半个月来的一点总结
  4. 获取excel名称java_使用Apache POI获取大型Excel文件的Excel工作表名称
  5. sd卡linux错误检测,android系统正在准备SD卡正在检测是否有错误且SD卡无法读取解决办法...
  6. Shape Completion using 3D-Encoder-Predictor CNNs and Shape Synthesis 第二部分
  7. 计算机窗口跳转列表,别小看它!Windows跳转列表效率高
  8. AcWing 1208. 翻硬币
  9. java当前类路径_java获取当前类的绝对路径
  10. Security+ 学习笔记40 网络安全设备
  11. (转)Windows Phone7页面导航
  12. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_02 泛型_3_定义和使用含有泛型的类...
  13. 十进制计算机算法,计算机知识--二进制,十进制,十六制算法
  14. java生成exe_java生成可执行文件的方法总结
  15. 测试开发 - 十年磨一剑(序)
  16. 计算机网络 网络安全问题概述
  17. 微博Jquery案例
  18. springCloud微服务生态圈囊括—— 服务注册,服务调用,服务降级,熔断。(1)
  19. 字节跳动大数据开发面试题-附答案
  20. EditPlus下载安装及使用

热门文章

  1. 电商运营年度报告怎么做?看这篇文章就够了
  2. 博弈论中的Stackelberg模型和库恩塔克条件如何通过Matlab求解或者数值分析?
  3. (23)【漏洞利用】【原理、利用过程】中间件解析漏洞、CMS漏洞、编辑器漏洞、CVE漏洞
  4. HR不会告诉你!Java程序员月薪8K和20K的区别!
  5. 期货开户要和客户经理详谈政策
  6. android5.1.1 触摸震动,基于android5.1无显示触摸系统的系统镜像裁剪
  7. 苹果怎么查看UDID iPhone/iPad查看UDID教程【详解】
  8. Windows命令-wmic
  9. java离职证明上的职位写的是什么_离职证明和简历上的不一样
  10. java开发微信如何维护登录状态_微信小程序中做用户登录与登录态维护的实现详解...