java redis 限流_Redis——限流算法之滑动窗口、漏斗限流的原理及java实现
限流的意义
限流一般是指在一个时间窗口内对某些操作请求的数量进行限制,比如一个论坛限制用户每秒钟只能发一个帖子,每秒钟只能回复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实现相关推荐
- 微服务限流及熔断一:四种限流算法(计数器算法、滑动窗口算法、令牌限流算法、漏桶限流算法)
引言 本篇内容根据<spring cloud alibaba 微服务原理与实战>中内容摘取,希望和大家分享限流的思想,本篇不涉及代码层面的实现. 限流的目的 目的:通过限制并发访问数或者限 ...
- 简单介绍4种限流算法!(固定窗口计数器算法、滑动窗口计数器算法、漏桶算法、令牌桶算法)...
作者:架构小菜 链接:https://www.jianshu.com/p/7987bf427b5b 简单介绍 4 种非常好理解并且容易实现的限流算法! 一.固定窗口计数器算法 规定我们单位时间处理的请 ...
- 限流算法之----滑动窗口
关于限流算法有许多种,有简单的计数限流阀,固定窗口限流法,滑动窗口限流法,漏桶算法,令牌桶算法.今天我们就来聊聊滑动窗口版的限流算法. 说起滑动窗口之前,我们先来说说固定窗口限流.固定窗口限流,我们可 ...
- 【算法】 - 滑动窗口
1. 题目链接 2. 分析 最多可以将K个值从0变成1,因此滑动窗口的限制条件: 0的数量(zeros)小于K,算法过程如下 有一个滑动窗口(slipper),每次都会从A中读入一个数 当读入的数为0 ...
- java redis 网络断开_Redis长时间连接后自动断开
从日志看2小时 [DEBUG] 22:02:48.206 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:151) - Get 'emailAlertService' ...
- java redis释放连接_redis在应用中使用连接不释放问题解决
今天测试,发现redis使用的时候,调用的链接一直不释放.后查阅蛮多资料,才发现一个配置导致的.并不是他们说的服务没有启动导致的. 1)配置文件 #redis连接配置================= ...
- java redis工具类_redis Java工具类详解
redis 工具 [Java]代码 private static ShardedJedisPool sharedJedisPool; public synchronized static void i ...
- java redis缓存使用_redis缓存在项目中的使用
关于redis为什么能作为缓存这个问题我们就不说了,直接来说一下redis缓存到底如何在项目中使用吧: 1.redis缓存如何在项目中配置? 1.1redis缓存单机版和集群版配置?(redis的客户 ...
- java redis事务机制_Redis 事务机制
Redis 事务:可以一次执行多个命令,本质是一组命令的集合.一个事务中的所有命令都会序列化,按顺序串行化执行而不会被其它命令插入,一次性.顺序性.排他性的执行一系列命令. 一.常用命令 [1] :开 ...
最新文章
- AFN post的数据编码格式问题
- POJ 1459 -- Power Network(最大流, 建图)
- 初入WEBOTS半个月来的一点总结
- 获取excel名称java_使用Apache POI获取大型Excel文件的Excel工作表名称
- sd卡linux错误检测,android系统正在准备SD卡正在检测是否有错误且SD卡无法读取解决办法...
- Shape Completion using 3D-Encoder-Predictor CNNs and Shape Synthesis 第二部分
- 计算机窗口跳转列表,别小看它!Windows跳转列表效率高
- AcWing 1208. 翻硬币
- java当前类路径_java获取当前类的绝对路径
- Security+ 学习笔记40 网络安全设备
- (转)Windows Phone7页面导航
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_02 泛型_3_定义和使用含有泛型的类...
- 十进制计算机算法,计算机知识--二进制,十进制,十六制算法
- java生成exe_java生成可执行文件的方法总结
- 测试开发 - 十年磨一剑(序)
- 计算机网络 网络安全问题概述
- 微博Jquery案例
- springCloud微服务生态圈囊括—— 服务注册,服务调用,服务降级,熔断。(1)
- 字节跳动大数据开发面试题-附答案
- EditPlus下载安装及使用
热门文章
- 电商运营年度报告怎么做?看这篇文章就够了
- 博弈论中的Stackelberg模型和库恩塔克条件如何通过Matlab求解或者数值分析?
- (23)【漏洞利用】【原理、利用过程】中间件解析漏洞、CMS漏洞、编辑器漏洞、CVE漏洞
- HR不会告诉你!Java程序员月薪8K和20K的区别!
- 期货开户要和客户经理详谈政策
- android5.1.1 触摸震动,基于android5.1无显示触摸系统的系统镜像裁剪
- 苹果怎么查看UDID iPhone/iPad查看UDID教程【详解】
- Windows命令-wmic
- java离职证明上的职位写的是什么_离职证明和简历上的不一样
- java开发微信如何维护登录状态_微信小程序中做用户登录与登录态维护的实现详解...