七叶笔记 » 数据库 » Redis Lua脚本实现ip限流示例

Redis Lua脚本实现ip限流示例

引言

分布式限流最关键的是要将限流服务做成原子化,而解决方案可以使使用redis+lua或者nginx+lua技术进行实现,通过这两种技术可以实现的高并发和高性能。首先我们来使用redis+lua实现时间窗内某个接口的请求数限流,实现了该功能后可以改造为限流总并发/请求数和限制总资源数。Lua本身就是一种编程语言,也可以使用它实现复杂的令牌桶或漏桶算法。如下操作因是在一个lua脚本中(相当于原子操作),又因Redis是单线程模型,因此是线程安全的。

相比Redis事务来说,Lua脚本有以下优点

减少网络开销: 不使用 Lua 的代码需要向 Redis 发送多次请求, 而脚本只需一次即可, 减少网络传输;原子操作: Redis 将整个脚本作为一个原子执行, 无需担心并发, 也就无需事务;复用: 脚本会永久保存 Redis 中, 其他客户端可继续使用.

Lua脚本

java代码

运行结果

请求是否被执行:true请求是否被执行:true请求是否被执行:false请求是否被执行:true请求是否被执行:true请求是否被执行:true请求是否被执行:fals

从结果可看出只有5个请求成功执行

IP限流Lua脚本

参考 https://www.jb51.net/books/561366.html

以上就是Redis Lua脚本实现ip限流示例的详细内容,更多关于Redis Lua限流的资料请关注七叶笔记其它相关文章!

相关文章