redis实现限速器方法有哪些
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,redis实现限速器方法有哪些?很多人都不太了解,今天小编为了让大家更加了解redis实现限速器方法,所以给大家总结了以下内容,一起往下看吧。redis 实现限速器的几种方式。GET + INCR +
千家信息网最后更新 2025年02月01日redis实现限速器方法有哪些
redis实现限速器方法有哪些?很多人都不太了解,今天小编为了让大家更加了解redis实现限速器方法,所以给大家总结了以下内容,一起往下看吧。
redis 实现限速器的几种方式。
GET + INCR + EXPIRE
先获取 key 的当前值,如果没有超出限制再执行 INCR 增1,如果 key 不存在,使用 redis 的事务初始化 key 和过期时间。
伪代码:
count = redis.GET(key)if redis return nil { redis.MULTI redis.INCR(key) redis.EXPIRE(key, expire_time) redis.EXEC count = 1}if count > limit { return 超出限制} else { redis.INCR(key)}
高并发下的问题:
如果同时10个并发程序执行 GET 返回了 nil, 那么这10个并发程序都会执行 redis 的事务将 key 增一,但每个程序的 count 值都为1,如果 limit 设置的值小于10,那么真正执行的程序就超过限制了。如果执行完事务后再查一次 redis 赋值给 count,那么每个程序可能都会返回10,从而没有程序能够继续执行。
key 已经存在的情况下,先 GET 后 INCR 的逻辑也可能会出现实际执行的程序数多于 limit 的情况。
INCR + EXPIRE
先 INCR, 如果值为1说明是 key 刚设置的,此时再执行 EXPIRE
伪代码:
count = redis.INCR(key)if count == 1 { redis.EXPIRE(key, expire_time)}if count > limit { return 超出限制}
慎用
如果 INCR 之后程序挂掉了,没有执行 EXPIRE, 那么这个 key 就没有过期时间了,具体的影响视需求而定。
lua脚本
local currentcurrent = redis.call("incr",KEYS[1])if tonumber(current) == 1 then redis.call("expire",KEYS[1],1)end
关于redis实现限速器方法有哪些就分享到这里了,当然并不止以上和大家分析的办法,不过小编可以保证其准确性是绝对没问题的。希望以上内容可以对大家有一定的参考价值,可以学以致用。如果喜欢本篇文章,不妨把它分享出去让更多的人看到。
程序
限速
限速器
限制
方法
事务
代码
内容
情况
时间
问题
学以致用
价值
准确性
办法
同时
实际
文章
方式
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
嵌入式软件开发app
QQ软件开发成本
勘察测绘研究院软件开发
电场网络安全报道
面向对象数据库技术习题
杭州网络安全峰会
苹果软件开发者费用是多少
网络安全主题馆图片
贵州时代网络技术分类服务标准
浙江省网络安全预算标准
服务器热插拔
像素大师在哪一个服务器
网络安全主题公园建设
蜀山区服务管理软件开发公司
软件开发外协工作
协同软件开发哪找
电脑机房服务器巡检表
sql数据库为什么连不上
如果自己做一个服务器
服务器外设管理制度
普陀区创新软件开发技术指导
济南 网络安全 公司
软件开发软件开发学校
怎么打开数据库管理器
电脑内存条可以用在服务器上吗
网络安全管理人员网络素养
学软件开发的女生多不多
网络技术支持工程师笔试题
上海多场景视频系统服务器
网络安全工程师有必要报考吗