令牌桶限流之redis-cell的安装,使用,详解
简言
1. redis使用有序集合zset也能实现简单的限流,但是只能处理几十,几百的量级,因为zset需要记录每一条信息,很占据空间。要想处理更大数量级的限流,必须使用其他方法
2. 通常的限流算法有两种,漏斗算法,令牌桶算法,本篇博客要讲的redis-cell是使用令牌桶算法实现的
3. redis-cell的官方地址:https://github.com/brandur/redis-cell
4. redis-cell只有一个命令 cl.throttle,使用很简单,需要注意的是最后一个参数为正时表取出令牌,为负时表放入令牌,不填时默认为1
5. 《Redis深度历险》一书中对redis-cell的介绍是错误的,书中以为 cl.throttle 设置的是容量,其实不然,设置的是 “容量-1”,比如设置99时,容量则为100
安装(由于redis-cell是使用rust语言编写的,而本人对rust毫无研究,也不想去部署rust的环境,所以直接下载编译好的动态库so文件,不再源码编译)
1.打开地址:https://github.com/brandur/redis-cell/releases,挑选适合自己环境的压缩包,下载最新的,本人是ubuntu环境,下载linux版的即可,下载到/usr/local/redis/redis-stable目录,并解压
2. 修改要使用的redis.conf文件,添加一行 “loadmodule /usr/local/redis/redis-stable/libredis_cell.so”,保存后,重启redis即可
3. 连接进我们的redis,运行命令 module list ,可以查看目前已经启用的module
使用
如上面简言所述,redis-cell使用很简单,只有一个命令
命令格式:cl.throttle key名字 令牌桶容量-1 令牌产生个数 令牌产生时间 本次取走的令牌数 (不写时默认1,负值表放入令牌)
返回格式:0成功,1失败
令牌桶的容量
当前桶内剩余的令牌数
成功时该值为-1,失败时表还需要等待多少秒可以有足够的令牌
表预计多少秒后令牌桶会满
示例1(key:mybag,该key不存在时会新建,容量为100(也就是99+1=100), 每10秒产生1个令牌,本次取出40个)
127.0.0.1:6379> cl.throttle mybag 99 1 10 40
1) (integer) 0
2) (integer) 100
3) (integer) 60
4) (integer) -1
5) (integer) 400
0表示取出成功,100表令牌桶容量,60表桶内剩余令牌数,-1表成功即本次取令牌不需等待,400表预计还需要400秒令牌桶会满,根据我们的速度设定,每10秒产生一个令牌,确实是需要400秒
示例2(从mybag的令牌桶中再取出40个)
127.0.0.1:6379> cl.throttle mybag 99 1 10 40
1) (integer) 0
2) (integer) 100
3) (integer) 20
4) (integer) -1
5) (integer) 798
127.0.0.1:6379> cl.throttle mybag 99 1 10 40
1) (integer) 1
2) (integer) 100
3) (integer) 20
4) (integer) 196
5) (integer) 796
第一次的0表示取出成功,100表令牌桶容量,20表桶内剩余令牌数,-1表成功即本次取令牌不需等待,798表预计还需要798秒令牌桶会满
第二次的1表示取出失败,100表令牌桶容量,20表桶内剩余令牌数,196表失败,还需要等待196秒可以重试本次操作,796表预计还需要796秒令牌桶会满
示例3(往mybag的令牌桶中先放入40个,再取出40个)
127.0.0.1:6379> cl.throttle mybag 99 1 10 -40
1) (integer) 0
2) (integer) 100
3) (integer) 126
4) (integer) -1
5) (integer) -262
127.0.0.1:6379> cl.throttle mybag 99 1 10 40
1) (integer) 0
2) (integer) 100
3) (integer) 60
4) (integer) -1
5) (integer) 400
放入40个时,0表放入成功,126就没啥意义了,因为最大容量才100,当然桶内不可能有126个;-262更诡异了,桶满了就满了呗,干嘛告诉我需要负262秒呢,感觉桶满时0更准确
我们验证前面的猜想,马上再取出40个可以看到结果值0表成功,60表桶内还剩下60个令牌,即容量100减去本次的40得到,也就验证了第一次返回的126毫无意义
令牌桶限流之redis-cell的安装,使用,详解相关推荐
- ASP.NET Core中使用令牌桶限流
在限流时一般会限制每秒或每分钟的请求数,简单点一般会采用计数器算法,这种算法实现相对简单,也很高效,但是无法应对瞬时的突发流量. 比如限流每秒100次请求,绝大多数的时间里都不会超过这个数,但是偶尔某 ...
- Jedis使用lua脚本完成令牌桶限流
Jedis使用lua脚本完成令牌桶限流 文章目录 Jedis使用lua脚本完成令牌桶限流 一.lua脚本的简单语法 二.令牌桶限流 1. 构思 2. 实现 三.Jemeter压测工具测试 一.lua脚 ...
- 可能要用心学高并发核心编程,限流原理与实战,分布式令牌桶限流
实战:分布式令牌桶限流 本节介绍的分布式令牌桶限流通过Lua+Java结合完成,首先在Lua脚本中完成限流的计算,然后在Java代码中进行组织和调用. 分布式令牌桶限流Lua脚本 分布式令牌桶限流Lu ...
- 【秒杀系统】零基础上手秒杀系统(二):令牌桶限流 + 再谈超卖
前言 本文是秒杀系统的第二篇,通过实际代码讲解,帮助你快速的了解秒杀系统的关键点,上手实际项目. 本篇主要讲解接口限流措施,接口限流其实定义也非常广,接口限流本身也是系统安全防护的一种措施,暂时列举这 ...
- 什么是限流?为什么会限流呢?常见的限流算法【固定窗口限流、滑动窗口限流、漏桶限流、令牌桶限流】是什么呢?
什么是限流?为什么会限流呢?常见的限流算法[固定窗口限流.滑动窗口限流.漏桶限流.令牌桶限流]是什么呢? 什么是限流? 为什么会限流? 1. 固定窗口限流算法 1.1 什么是固定窗口限流算法 1.2 ...
- 我们公司使用了 5 年的系统限流方案 ,从实现到部署实战详解,稳的一B
前言 最近几年,随着微服务的流行,服务和服务之间的依赖越来越强,调用关系越来越复杂,服务和服务之间的稳定性越来越重要.在遇到突发的请求量激增,恶意的用户访问,亦或请求频率过高给下游服务带来较大压力时, ...
- 十三水算法php_基于PHP+Redis令牌桶限流
一 .场景描述 在开发接口服务器的过程中,为了防止客户端对于接口的滥用,保护服务器的资源, 通常来说我们会对于服务器上的各种接口进行调用次数的限制.比如对于某个 用户,他在一个时间段(interval ...
- php限制接口访问次数_令牌桶限流思路分享(PHP+Redis实现机制)
一 .场景描述 在开发接口服务器的过程中,为了防止客户端对于接口的滥用,保护服务器的资源, 通常来说我们会对于服务器上的各种接口进行调用次数的限制.比如对于某个 用户,他在一个时间段(interval ...
- 基于Redis和 Lua 实现分布式令牌桶限流
rpc-tech-stack 系列的实践文章 ~ 本文属于限流话题. 限流是一个很大的话题,准备把其中的所有限流器都实现一遍,以此也算全都写过了,到时候再用也不至于会心虚,毕竟真实写完成过.本文主要讲 ...
- 分布式限流实战--redis实现令牌桶限流
这篇文章我们主要是分析一下分布式限流的玩法. 因为限流也是一个经典用法了. 1.微服务限流 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.缓存.降级和限流是保护微服务系统运行稳定性的三大利器 ...
最新文章
- 【Qt】QtCreator updatePchInfo:switching to none
- 聊聊lettuce的shareNativeConnection参数
- java中获取当前服务器的Ip地址
- 【最佳解法】剑指 Offer 25. 合并两个排序的链表
- java 锁_Java之线程并发的各种锁、锁、锁
- 人工智障学习笔记——深度学习(1)神经网络
- 数学(FFT):BZOJ 3527 [Zjoi2014]力
- 机器人 知乎碧桂园_杨国强森林城市与机器人跃进后的“梦醒时分”
- easyui模版html,EasyUI 模板(Template)_Vue EasyUI Demo
- 3dsmax展uv_TexTools|3dmax展UV插件(TexTools for 3ds Max)下载v4.10免费版 - 欧普软件下载
- mysql多表关联数据删除
- vCenter Server 相关介绍
- prometheus常用函数详解
- 终于有人把元数据讲明白了
- 微信小程序开发者工具使用vant组件
- Excel文件损坏打不开的常见原因及解决方法
- 开关电源(Switch Regulator)---Buck
- pixhawk飞控解锁方法
- 876链表的中间节点
- Linux ❀ KickStart-无人值守部署
热门文章
- [转]VSTO Office二次开发应用程序键盘鼠标钩子
- REVIT模型之机器人瓦力
- 2021牛客多校7 - xay loves monotonicity(线段树区间合并)
- POJ - 3190 Stall Reservations(贪心+优先队列优化)
- SPOJ - DQUERY D-query(莫队/线段树+离线/主席树)
- CodeForces - 353E Antichain(贪心+思维)
- 安卓系统手机软件_2M不到的安卓神器!有了这五款软件,iphone用户都羡慕
- python算法题-汉诺塔问题递归解法(python实现)
- codeforces contest 1119
- 斐波那契数拓展问题:leetcode-70 爬楼梯问题 leetcode-1137 泰波那契数问题解法