前言
本文是在java语言场景下,基于Redis内存数据库和Lua脚本技术实现的令牌桶方案。需要看官了解简单的上述名词的含义。
引用
https://www.jianshu.com/p/c8cee1507ccc?from=singlemessage
名词解释
案例
日常业务中,服务调用角度,pc端使用与app端使用频次有明显的区别。一方面,为了服务的稳定性;另一方面,业务场景中不必要的高频次使用并不合理。由此,部分业务场景衍生出了一些在服务接口层面的卡口的需求,类同腾讯的IM在接口使用上的限制。eg:接口的并发请求频次、亦或是单个窗口期内的使用次数的限制等。
在有类似的业务需求的同时,参照了市面上,比较合适(易上手,易维护,易传达等)的技术方案,想到了,基于Redis内存数据库和lua脚本的令牌桶方案,也因此想要记录一篇本次使用记录。
话不多说,下面开始上代码!!!
引入依赖
1 <dependencies> 2 <dependency> 3 <groupId>org.springframework.boot</groupId> 4 <artifactId>spring-boot-starter-web</artifactId> 5 </dependency> 6 <dependency> 7 <groupId>org.springframework.boot</groupId> 8 <artifactId>spring-boot-starter-data-redis</artifactId> 9 </dependency> 10 <dependency> 11 <groupId>org.springframework.boot</groupId> 12 <artifactId>spring-boot-starter-aop</artifactId> 13 </dependency> 14 <dependency> 15 <groupId>org.apache.commons</groupId> 16 <artifactId>commons-lang3</artifactId> 17 </dependency> 18 <dependency> 19 <groupId>org.springframework.boot</groupId> 20 <artifactId>spring-boot-starter-test</artifactId> 21 </dependency> 22 </dependencies>