令牌桶(token bucket)
https://www.youtube.com/watch?v=PJ-c0QI-QCk
令牌桶维护的常见思路就是通过一个线程后台维护桶中令牌的数量,但是这种方式存在浪费线程资源的情况,比如两个小时没有用户访问接口,那我的线程还是在后台持续的运行,浪费了资源。
而令牌桶通过维护两个变量实现惰性维护令牌数量,而不需要使用后台线程的方式。两个变量为“最后一次添加的时间”、“下一次添加的时间”,如果用户访问接口,先将当前时间和下一次添加的时间作比较,如果是大于,则进行令牌桶的维护工作,否则直接消费令牌运行业务。
开源框架
bucket4j