1、应用redis
2、令牌桶算法
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.0.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>25.1-jre</version></dependency></dependencies>
/*** 功能说明:使用RateLimiter 实现令牌桶算法**/@RestControllerpublic class IndexController {@Autowiredprivate OrderService orderService;// 解释:1.0 表示 每秒中生成1个令牌存放在桶中RateLimiter rateLimiter = RateLimiter.create(1.0);// 下单请求@RequestMapping("/order")public String order() {// 1.限流判断// 如果在500秒内 没有获取不到令牌的话,则会一直等待System.out.println("生成令牌等待时间:" + rateLimiter.acquire());boolean acquire = rateLimiter.tryAcquire(500, TimeUnit.MILLISECONDS);if (!acquire) {System.out.println("你在怎么抢,也抢不到,因为会一直等待的,你先放弃吧!");return "你在怎么抢,也抢不到,因为会一直等待的,你先放弃吧!";}// 2.如果没有达到限流的要求,直接调用订单接口boolean isOrderAdd = orderService.addOrder();if (isOrderAdd) {return "恭喜您,抢购成功!";}return "抢购失败!";}}
3、滑动窗口计数器法
4、漏桶算法
