为什么redis+lua分布式限流,redis本身就是可以分布式部署的,为什么还需要配置使用lua来实现限流呢?
我能想到的可能就是以下几点:
1、把计算部分使用lua脚本去实现,每个需要用到的地方直接去调用脚本执行,不用在每个地方去查询处理。
2、提取公共方法查询是否限流。在这期间有两个问题,1:需要把当前请求counter查询出来,再做处理,2:这期间如果有并发的话,需要额外的同步处理。
结合以上:
我看了有大神发的帖子,是这样写的,因为redis本身就是单线程的,所以直接调用lua脚本执行 ,也不要处理同步问题。虽然redis是单线程的,但它实际上做增/删操作是使用的epoll,那这样来讲的话,是不是reids调用luz脚本是单线程的,而其他是使用的epoll呢?
请大神们解答一下。
“Redis 本身就是可以分布式部署的,为什么还需要配置使用 Lua 来实现限流呢?”
这句话里的前后两个部分本身就不搭嘎呀,两者也不是冲突的东西啊。
换个比方你就明白为啥不搭嘎了:“MySql 本身就是可以分布式部署的,为什么还需要使用 Java 来实现接口呢?”
明白意思了吗?Redis 就是个存储数据的地方,而 Lua 是编程语言、是业务逻辑、是你的程序。
实际上你不用 Lua 也完全可以,就是把限流的逻辑写在自己的程序里呗,没啥问题的。
但用 Lua 实现限流的工作有几点好处: