Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Redis 实现限流

Redis 实现限流

作者头像
崔哥
发布于 2022-05-25 12:59:57
发布于 2022-05-25 12:59:57
59700
代码可运行
举报
文章被收录于专栏:崔哥的专栏崔哥的专栏
运行总次数:0
代码可运行

下面介绍两种方法

zset

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function uuid(){
    $str = "123456790abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $uuid = "";
    for ($i = 0; $i < 10; $i++) {
        $uuid .= $str[mt_rand(0, strlen($str) - 1)];
    }
    return $uuid;
}

$time = time();
$key='limit:100';
$val = uuid();

$redis = new Redis();
$redis->connect("docker-redis", 6379);
$ret = $redis->multi(2)
    ->zRemRangeByScore($key, 0, $time - 60)
    ->zAdd($key, time(), $val)
    ->zCard($key)
    ->exec();

if ($ret[2] > 10) {
    echo 'false, 每分钟最多访问10次';
    return false;
}
echo 'ok';

redis-cell

Redis 4.0提供了一个限流Redis模块,称为Redis-Cell。该模块使用了漏斗算法,并提供了原子的限流指定。

https://github.com/brandur/redis-cell/releases/download/v0.3.0/redis-cell-v0.3.0-x86_64-unknown-linux-gnu.tar.gz

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vi redis.conf
loadmodule /data/modules/libredis_cell.so

root@3afcc7091943:/data# redis-cli
127.0.0.1:6379> CL.THROTTLE user123 15 30 60 1

CL.THROTTLE user123 15 30 60 1
               ▲     ▲  ▲  ▲ ▲
               |     |  |  | └───── apply 1 token (default if omitted)
               |     |  └──┴─────── 30 tokens / 60 seconds
               |     └───────────── 15 max_burst
               └─────────────────── key "user123"

$redis = new Redis();
$redis->connect("docker-redis", 6379);
//10次1秒
for($i=0;$i<120;$i++) {
    $ret = $redis->rawCommand("CL.THROTTLE", 'limit', 100, 10, 1, 1);
    echo date('Y-m-d H:i:s').': '.($ret[0]===0?'pass':'no').PHP_EOL;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于Redis实现令牌桶限流
常用限流算法有漏桶算法和令牌桶算法,本文借助Redis的redis_cell模块来实现令牌桶算法限流。
雪飞鸿
2021/08/10
9670
细品服务并发限流+Redis-cell的使用
今天热搜“海底捞的排号系统挂掉了”,也许是今天情人节,各位情侣去海底捞约会,进入排号系统的流量猛增,导致服务支撑不住,直接挂掉,在这里只是猜测(大胆猜测,小心求证)。那我们应该如何防止因为流量突然猛增而导致服务挂掉的问题呢?那就是限流了。 那我们通过redis 来设计限流策略。
袁新栋-jeff.yuan
2020/09/01
1.3K0
细品服务并发限流+Redis-cell的使用
redis实际应用-限流
旅游景点通常都会有最大的接待量,不可能无限制的放游客进入,比如故宫每天只卖八万张票,超过八万的游客,无法买票进入,因为如果超过八万人,景点的工作人员可能就忙不过来,过于拥挤的景点也会影响游客的体验和心情,并且还会有安全隐患;「只卖N张票,这就是一种限流的手段」。
程序员小饭
2021/04/26
7310
redis实际应用-限流
限流的6大狠招,附详细代码和评测结果
为了上班方便,去年我把自己在北郊的房子租出去了,搬到了南郊,这样离我上班的地方就近了,它为我节约了很多的时间成本,我可以用它来做很多有意义的事,最起码不会因为堵车而闹心了,幸福感直线上升。
磊哥
2020/05/19
5330
用redis做一个简单的限流
最近项目中有个需求要实现限制某个用户在2个小时内只能访问3次的效果,所以就简单地用redis实现了一个限流方案。
Johns
2021/08/23
1.3K0
用redis做一个简单的限流
Redis GEO地理位置
Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。
崔哥
2022/05/25
5840
PHP安装、使用Redis,学习笔记。
Redis相关知识:https://www.runoob.com/redis/redis-tutorial.html
房东的狗丶
2023/02/17
4120
Redis 实现接口访问频率限制
为什么限制访问频率 做服务接口时通常需要用到请求频率限制 Rate limiting,例如限制一个用户1分钟内最多可以范围100次 主要用来保证服务性能和保护数据安全 因为如果不进行限制,服务调用者可以随意访问,想调几次就调几次,会给服务造成很大的压力,降低性能,再比如有的接口需要验证调用者身份,如果不进行访问限制,调用者可以进行暴力尝试 使用 Redis 来实现 通过 Redis 可以方便的实现频率限制功能,下面介绍两种不错的方法 (1)方案1 - Lua脚本 思路 把限制逻辑封装到一个Lua脚本中,调用
dys
2018/04/04
3.8K0
Redis 实现接口访问频率限制
浅谈限流组件的应用和设计原则
做业务的同学都知道,在现实情况中,往往会出现流量暴增的情况。这些流量可能来自于黑客的爬虫,也可能来自于节日大促,或者其他一些渠道。当然业界都有对策,比如反爬、熔断、降级、限流等等不一而足。
xiaoxi666
2021/08/10
6500
Redis学习笔记:Redis实践与应用
接着考虑程序失败可能导致的锁一直不释放问题,搭配 expire 来实现过期自动删除;
玛卡bug卡
2022/09/20
4280
Redis学习笔记:Redis实践与应用
用Redis实现接口限流
在高并发环境下,为了缓解数据库,服务器的压力,往往需要对一些接口进行限制操作。比如某个接口10s内只能调用5次,需要怎么做呢?
Lvshen
2022/05/05
6250
用Redis实现接口限流
Redis 实现多规则限流的思考与实践
市面上很多介绍redis如何实现限流的,但是大部分都有一个缺点,就是只能实现单一的限流,比如1分钟访问1次或者60分钟访问10次这种,但是如果想一个接口两种规则都需要满足呢,我们的项目又是分布式项目,应该如何解决,下面就介绍一下redis实现分布式多规则限流的方式。
架构精进之路
2024/01/08
5980
Redis 实现多规则限流的思考与实践
Laravel Redis操作大全
1,普通得set/get操作,set操作,如果键名存在,则会覆盖原有得值 $redis = app("redis.connection"); $redis->set('library' , 'phpredis');//存储key为library ,值phpredis得记录 $redis->get("library");//获取key为library得记录值 set/get 多个key-value $mkv = array(                         "user:001"=>'
Lansonli
2021/10/09
1.2K0
带你走入redis的应用场景(补充一)
1. 字符串类型1.1 常用APISET key value //存入...
友儿
2022/09/11
2920
redis学习笔记
优点: 高并发读写性能、大数据量扩展(分布式存储)、配置简单、操作与数据模型灵活高效、成本 低廉
csxiaoyao
2019/02/15
5500
折腾基本功:Redis 从入门到 Docker 部署
前面写过了两篇 “Redis” 相关的内容,今天补一篇“基本功”内容,让后续折腾系列文章可以篇幅更短、内容更专注。
soulteary
2024/12/01
1670
折腾基本功:Redis 从入门到 Docker 部署
PHP操作Redis详解案例
$redis = new Redis(); connect, open 链接redis服务 参数 host: string,服务地址 port: int,端口号 timeout: float,链接时长 (可选, 默认为 0 ,不限链接时间) 注: 在redis.conf中也有时间,默认为300 pconnect, popen 不会主动关闭的链接 参考上面 setOption 设置redis模式 getOption 查看redis设置的模式 ping 查看连接状态 get 得到某个key的值(string值)
思梦php
2018/03/09
1.4K0
Redis发布订阅:我想着应该是全网讲解最简单最通俗的文章了吧!
可能小伙伴的工作年限大部分已经超过三年甚至四年五年,不知道是否有一种危机感,我们写了那么多的需求代码没有20w行也有个10w行了吧,但是出去找工作的时候不是笔试被pass掉就是面试被pass,你会发现好多你只是知道但是回答不上来。这个时候你才知道去补习知识点,其实这种做法对自身发展不太友好的。
我是阿沐
2021/06/14
1.6K0
Redis发布订阅:我想着应该是全网讲解最简单最通俗的文章了吧!
[PHP] 基于redis实现滑动窗口式的短信发送接口限流
2.滑动窗口就是随着时间的流动 , 进行动态的删减区间内的数据 , 限制时获取区间内的数据
唯一Chat
2020/06/28
2.1K0
php使用redis异步队列爬取网站图片的教程
相信大家都很想取爬取某些网站的内容,图片,但是不知道怎么动手,以下的教程就是从0开始教大家爬取某个网站图片
仙士可
2019/12/19
1.7K0
php使用redis异步队列爬取网站图片的教程
相关推荐
基于Redis实现令牌桶限流
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验