采用Redis实现后端限流(后端限流redis)
限流是防止系统中的拥堵和故障的重要措施,可以减少客户端发送的大量无用的、超量的请求;而采用Redis实现后端限流法,这个方法相对于传统的前端或是硬件限流方式有着不一样的优势,它可以方便地实现动态限流,而且比起集中式数据库的限流更加的可靠,比较耐用。
基于Redis实现后端限流可以把限流逻辑嵌入到程序中,从而不用实现单独的限流服务。
实现Redis限流的一般步骤如下:
1. 使用Redis的incr()命令计算当前请求数量,incr()会将键名(key)创建或者更新变量的值,并返回当前值。
2. 使用expire命令设置指定动作的过期时间,当超出指定时间后,key对象会被销毁,以达到重置限流数量的目的。
下面给出一段代码,实现一个可限流的接口:
var key = "interface_limit"
const rate = 100 ; redis.incr(key,function(err,result){
if(err) //redis失败
else{ if (result ==1 ){
redis.expireat(key,getExpiredSeconds(), function(err,result){
if (err) //过期失败
else //过期设定成功
}) return true
} else if ( result
return true }
else return false
}})
上面的代码通过Redis的incr()和expire命令,以及接口的请求数量来实现简单的后端限流,它可以将限流逻辑嵌入到程序中,让限流选项更加的灵活。
然而,Redis实施的后端限流技术也有部分缺点,比如,你应用程序必须在一致性哈希节点上做锁定,限流请求也会导致Redis服务器负担增加,所以限流行为在无需场景中就不要过度使用了,另外,限流之后的请求也是无意义的,用户很容易产生恼怒的情绪。
采用Redis实现的后端限流技术是一种很好的限流方法,但是也要根据实际情况考虑,在实际应用中也要考虑性能,安全性,以及对用户体验的影响。