限流的实现

23 min

常见的限流算法

常见的几种限流算法如下:

  1. 令牌桶
  2. 漏桶
  3. 滑动窗口
  4. 固定窗口

我在面试的时候实现的方式就有点类似于4,面试官也提出会有突刺问题,后面问我怎么优化,因为我实在不会写令牌桶的算法,我就说了滑动窗口,更加细粒度的划分这块。

所以接下来实现一下漏桶和令牌桶吧

漏桶

import java.util.concurrent.*;
import java.util.*;

public class LeakyBucket {
    //定义漏桶速率
    private int qps;
    //定义漏桶
    private LinkedBlockingDeque<Object> waterBucket;

    public void initLeaky(){
        Runnable run = new Runnable() {
            @Override
            public void run() {
                while(true){
                    //使用TimeUnit组件,每隔1000/qps处理一个消息
                    try {
                        TimeUnit.MICROSECONDS.sleep(1000/qps);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                    //漏水
                    waterBucket.poll();
                }
            }
        };
        Thread thread = new Thread(run);
        thread.start();
    }

    public LeakyBucket(int capacity,int qps){
        this.qps = qps;
        this.waterBucket = new LinkedBlockingDeque<>(capacity);
        //创建完桶要开始滴水
        initLeaky();
    }

    public boolean tryAcquire(){
        //这里一定要用offer,否则超容量就报错了
        return waterBucket.offer(1);
    }

    public static void main(String[] args) throws InterruptedException {
        int count = 0;
        LeakyBucket leakyBucket = new LeakyBucket(100,100);
        for(int i=0;i<200;i++){
            Date now = new Date();
            if(leakyBucket.tryAcquire()){
                count++;
                System.out.println(i+" at "+now+" get success");
            }else {
                System.out.println(i+" at "+now+" get error");
            }
        }
        System.out.println("total num:"+ count);
    }
}

输出结果并不严格限制1s只能获取一百个,而是只要桶还能装下即可获取流量允许,所以结果如下:

0 at Mon Apr 07 13:56:23 CST 2025 get success
1 at Mon Apr 07 13:56:23 CST 2025 get success
2 at Mon Apr 07 13:56:23 CST 2025 get success
3 at Mon Apr 07 13:56:23 CST 2025 get success
4 at Mon Apr 07 13:56:23 CST 2025 get success
5 at Mon Apr 07 13:56:23 CST 2025 get success
6 at Mon Apr 07 13:56:23 CST 2025 get success
7 at Mon Apr 07 13:56:23 CST 2025 get success
8 at Mon Apr 07 13:56:23 CST 2025 get success
9 at Mon Apr 07 13:56:23 CST 2025 get success
10 at Mon Apr 07 13:56:23 CST 2025 get success
11 at Mon Apr 07 13:56:23 CST 2025 get success
12 at Mon Apr 07 13:56:23 CST 2025 get success
13 at Mon Apr 07 13:56:23 CST 2025 get success
14 at Mon Apr 07 13:56:23 CST 2025 get success
15 at Mon Apr 07 13:56:23 CST 2025 get success
16 at Mon Apr 07 13:56:23 CST 2025 get success
17 at Mon Apr 07 13:56:23 CST 2025 get success
18 at Mon Apr 07 13:56:23 CST 2025 get success
19 at Mon Apr 07 13:56:23 CST 2025 get success
20 at Mon Apr 07 13:56:23 CST 2025 get success
21 at Mon Apr 07 13:56:23 CST 2025 get success
22 at Mon Apr 07 13:56:23 CST 2025 get success
23 at Mon Apr 07 13:56:23 CST 2025 get success
24 at Mon Apr 07 13:56:23 CST 2025 get success
25 at Mon Apr 07 13:56:23 CST 2025 get success
26 at Mon Apr 07 13:56:23 CST 2025 get success
27 at Mon Apr 07 13:56:23 CST 2025 get success
28 at Mon Apr 07 13:56:23 CST 2025 get success
29 at Mon Apr 07 13:56:23 CST 2025 get success
30 at Mon Apr 07 13:56:23 CST 2025 get success
31 at Mon Apr 07 13:56:23 CST 2025 get success
32 at Mon Apr 07 13:56:23 CST 2025 get success
33 at Mon Apr 07 13:56:23 CST 2025 get success
34 at Mon Apr 07 13:56:23 CST 2025 get success
35 at Mon Apr 07 13:56:23 CST 2025 get success
36 at Mon Apr 07 13:56:23 CST 2025 get success
37 at Mon Apr 07 13:56:23 CST 2025 get success
38 at Mon Apr 07 13:56:23 CST 2025 get success
39 at Mon Apr 07 13:56:23 CST 2025 get success
40 at Mon Apr 07 13:56:23 CST 2025 get success
41 at Mon Apr 07 13:56:23 CST 2025 get success
42 at Mon Apr 07 13:56:23 CST 2025 get success
43 at Mon Apr 07 13:56:23 CST 2025 get success
44 at Mon Apr 07 13:56:23 CST 2025 get success
45 at Mon Apr 07 13:56:23 CST 2025 get success
46 at Mon Apr 07 13:56:23 CST 2025 get success
47 at Mon Apr 07 13:56:23 CST 2025 get success
48 at Mon Apr 07 13:56:23 CST 2025 get success
49 at Mon Apr 07 13:56:23 CST 2025 get success
50 at Mon Apr 07 13:56:23 CST 2025 get success
51 at Mon Apr 07 13:56:23 CST 2025 get success
52 at Mon Apr 07 13:56:23 CST 2025 get success
53 at Mon Apr 07 13:56:23 CST 2025 get success
54 at Mon Apr 07 13:56:23 CST 2025 get success
55 at Mon Apr 07 13:56:23 CST 2025 get success
56 at Mon Apr 07 13:56:23 CST 2025 get success
57 at Mon Apr 07 13:56:23 CST 2025 get success
58 at Mon Apr 07 13:56:23 CST 2025 get success
59 at Mon Apr 07 13:56:23 CST 2025 get success
60 at Mon Apr 07 13:56:23 CST 2025 get success
61 at Mon Apr 07 13:56:23 CST 2025 get success
62 at Mon Apr 07 13:56:23 CST 2025 get success
63 at Mon Apr 07 13:56:23 CST 2025 get success
64 at Mon Apr 07 13:56:23 CST 2025 get success
65 at Mon Apr 07 13:56:23 CST 2025 get success
66 at Mon Apr 07 13:56:23 CST 2025 get success
67 at Mon Apr 07 13:56:23 CST 2025 get success
68 at Mon Apr 07 13:56:23 CST 2025 get success
69 at Mon Apr 07 13:56:23 CST 2025 get success
70 at Mon Apr 07 13:56:23 CST 2025 get success
71 at Mon Apr 07 13:56:23 CST 2025 get success
72 at Mon Apr 07 13:56:23 CST 2025 get success
73 at Mon Apr 07 13:56:23 CST 2025 get success
74 at Mon Apr 07 13:56:23 CST 2025 get success
75 at Mon Apr 07 13:56:23 CST 2025 get success
76 at Mon Apr 07 13:56:23 CST 2025 get success
77 at Mon Apr 07 13:56:23 CST 2025 get success
78 at Mon Apr 07 13:56:23 CST 2025 get success
79 at Mon Apr 07 13:56:23 CST 2025 get success
80 at Mon Apr 07 13:56:23 CST 2025 get success
81 at Mon Apr 07 13:56:23 CST 2025 get success
82 at Mon Apr 07 13:56:23 CST 2025 get success
83 at Mon Apr 07 13:56:23 CST 2025 get success
84 at Mon Apr 07 13:56:23 CST 2025 get success
85 at Mon Apr 07 13:56:23 CST 2025 get success
86 at Mon Apr 07 13:56:23 CST 2025 get success
87 at Mon Apr 07 13:56:23 CST 2025 get success
88 at Mon Apr 07 13:56:23 CST 2025 get success
89 at Mon Apr 07 13:56:23 CST 2025 get success
90 at Mon Apr 07 13:56:23 CST 2025 get success
91 at Mon Apr 07 13:56:23 CST 2025 get success
92 at Mon Apr 07 13:56:23 CST 2025 get success
93 at Mon Apr 07 13:56:23 CST 2025 get success
94 at Mon Apr 07 13:56:23 CST 2025 get success
95 at Mon Apr 07 13:56:23 CST 2025 get success
96 at Mon Apr 07 13:56:23 CST 2025 get success
97 at Mon Apr 07 13:56:23 CST 2025 get success
98 at Mon Apr 07 13:56:23 CST 2025 get success
99 at Mon Apr 07 13:56:23 CST 2025 get success
100 at Mon Apr 07 13:56:23 CST 2025 get success
101 at Mon Apr 07 13:56:23 CST 2025 get success
102 at Mon Apr 07 13:56:23 CST 2025 get success
103 at Mon Apr 07 13:56:23 CST 2025 get success
104 at Mon Apr 07 13:56:23 CST 2025 get error
105 at Mon Apr 07 13:56:23 CST 2025 get error
106 at Mon Apr 07 13:56:23 CST 2025 get error
107 at Mon Apr 07 13:56:23 CST 2025 get error
108 at Mon Apr 07 13:56:23 CST 2025 get error
109 at Mon Apr 07 13:56:23 CST 2025 get error
110 at Mon Apr 07 13:56:23 CST 2025 get error
111 at Mon Apr 07 13:56:23 CST 2025 get error
112 at Mon Apr 07 13:56:23 CST 2025 get error
113 at Mon Apr 07 13:56:23 CST 2025 get error
114 at Mon Apr 07 13:56:23 CST 2025 get error
115 at Mon Apr 07 13:56:23 CST 2025 get error
116 at Mon Apr 07 13:56:23 CST 2025 get error
117 at Mon Apr 07 13:56:23 CST 2025 get error
118 at Mon Apr 07 13:56:23 CST 2025 get error
119 at Mon Apr 07 13:56:23 CST 2025 get error
120 at Mon Apr 07 13:56:23 CST 2025 get error
121 at Mon Apr 07 13:56:23 CST 2025 get error
122 at Mon Apr 07 13:56:23 CST 2025 get error
123 at Mon Apr 07 13:56:23 CST 2025 get error
124 at Mon Apr 07 13:56:23 CST 2025 get error
125 at Mon Apr 07 13:56:23 CST 2025 get error
126 at Mon Apr 07 13:56:23 CST 2025 get error
127 at Mon Apr 07 13:56:23 CST 2025 get error
128 at Mon Apr 07 13:56:23 CST 2025 get error
129 at Mon Apr 07 13:56:23 CST 2025 get error
130 at Mon Apr 07 13:56:23 CST 2025 get error
131 at Mon Apr 07 13:56:23 CST 2025 get error
132 at Mon Apr 07 13:56:23 CST 2025 get success
133 at Mon Apr 07 13:56:23 CST 2025 get error
134 at Mon Apr 07 13:56:23 CST 2025 get error
135 at Mon Apr 07 13:56:23 CST 2025 get error
136 at Mon Apr 07 13:56:23 CST 2025 get error
137 at Mon Apr 07 13:56:23 CST 2025 get error
138 at Mon Apr 07 13:56:23 CST 2025 get error
139 at Mon Apr 07 13:56:23 CST 2025 get error
140 at Mon Apr 07 13:56:23 CST 2025 get error
141 at Mon Apr 07 13:56:23 CST 2025 get error
142 at Mon Apr 07 13:56:23 CST 2025 get error
143 at Mon Apr 07 13:56:23 CST 2025 get error
144 at Mon Apr 07 13:56:23 CST 2025 get error
145 at Mon Apr 07 13:56:23 CST 2025 get error
146 at Mon Apr 07 13:56:23 CST 2025 get error
147 at Mon Apr 07 13:56:23 CST 2025 get error
148 at Mon Apr 07 13:56:23 CST 2025 get error
149 at Mon Apr 07 13:56:23 CST 2025 get error
150 at Mon Apr 07 13:56:23 CST 2025 get error
151 at Mon Apr 07 13:56:23 CST 2025 get error
152 at Mon Apr 07 13:56:23 CST 2025 get error
153 at Mon Apr 07 13:56:23 CST 2025 get error
154 at Mon Apr 07 13:56:23 CST 2025 get error
155 at Mon Apr 07 13:56:23 CST 2025 get error
156 at Mon Apr 07 13:56:23 CST 2025 get error
157 at Mon Apr 07 13:56:23 CST 2025 get error
158 at Mon Apr 07 13:56:23 CST 2025 get error
159 at Mon Apr 07 13:56:23 CST 2025 get error
160 at Mon Apr 07 13:56:23 CST 2025 get error
161 at Mon Apr 07 13:56:23 CST 2025 get error
162 at Mon Apr 07 13:56:23 CST 2025 get error
163 at Mon Apr 07 13:56:23 CST 2025 get error
164 at Mon Apr 07 13:56:23 CST 2025 get error
165 at Mon Apr 07 13:56:23 CST 2025 get error
166 at Mon Apr 07 13:56:23 CST 2025 get error
167 at Mon Apr 07 13:56:23 CST 2025 get error
168 at Mon Apr 07 13:56:23 CST 2025 get error
169 at Mon Apr 07 13:56:23 CST 2025 get success
170 at Mon Apr 07 13:56:23 CST 2025 get error
171 at Mon Apr 07 13:56:23 CST 2025 get error
172 at Mon Apr 07 13:56:23 CST 2025 get error
173 at Mon Apr 07 13:56:23 CST 2025 get error
174 at Mon Apr 07 13:56:23 CST 2025 get error
175 at Mon Apr 07 13:56:23 CST 2025 get error
176 at Mon Apr 07 13:56:23 CST 2025 get error
177 at Mon Apr 07 13:56:23 CST 2025 get error
178 at Mon Apr 07 13:56:23 CST 2025 get error
179 at Mon Apr 07 13:56:23 CST 2025 get error
180 at Mon Apr 07 13:56:23 CST 2025 get error
181 at Mon Apr 07 13:56:23 CST 2025 get error
182 at Mon Apr 07 13:56:23 CST 2025 get error
183 at Mon Apr 07 13:56:23 CST 2025 get error
184 at Mon Apr 07 13:56:23 CST 2025 get error
185 at Mon Apr 07 13:56:23 CST 2025 get error
186 at Mon Apr 07 13:56:23 CST 2025 get error
187 at Mon Apr 07 13:56:23 CST 2025 get error
188 at Mon Apr 07 13:56:23 CST 2025 get error
189 at Mon Apr 07 13:56:23 CST 2025 get error
190 at Mon Apr 07 13:56:23 CST 2025 get error
191 at Mon Apr 07 13:56:23 CST 2025 get error
192 at Mon Apr 07 13:56:23 CST 2025 get error
193 at Mon Apr 07 13:56:23 CST 2025 get error
194 at Mon Apr 07 13:56:23 CST 2025 get error
195 at Mon Apr 07 13:56:23 CST 2025 get error
196 at Mon Apr 07 13:56:23 CST 2025 get error
197 at Mon Apr 07 13:56:23 CST 2025 get error
198 at Mon Apr 07 13:56:23 CST 2025 get error
199 at Mon Apr 07 13:56:23 CST 2025 get error
total num:106

可以看到,漏桶在处理突发流量上存在一定的问题,如果流量迅速打满这个桶,那么漏桶就会出现很长一段时间的不能获取。

这里主要是IO耗时,和无法模拟真实流量,所以不太好测试

这时候我们再搓一个令牌桶

import java.util.Date;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.TimeUnit;

public class TokenBucket {
    private int qps;
    private LinkedBlockingDeque<Date> tokenBucket;

    private void initGenToken(){
        for (int i = 0; i < qps; i++) {
            //一开始先把桶装满
            tokenBucket.offer(new Date());
        }
      	//生成,令牌
        Runnable run = new Runnable() {
            @Override
            public void run() {
                while(true){
                    try {
                        TimeUnit.MICROSECONDS.sleep(1000/qps);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                    tokenBucket.offer(new Date());
                }
            }
        };
        Thread thread = new Thread(run);
        thread.start();

    }

    public TokenBucket(int qps,int capacity){
        this.qps = qps;
        this.tokenBucket = new LinkedBlockingDeque<>(capacity);
        initGenToken();
    }

    public boolean tryAcquire(){
        Date date = tokenBucket.poll();
        return date != null;
    }
    public static void main(String[] args) throws InterruptedException {
        TokenBucket tokenBucket = new TokenBucket(100,100);
        int count = 0;
        for(int i=0;i<200;i++){
            Date now = new Date();
            if(tokenBucket.tryAcquire()){
                count++;
                System.out.println(i+" at "+now+" get success");
            }else {
                System.out.println(i+" at "+now+" get error");
            }
        }
        System.out.println("total num:"+ count);
    }
}

消耗令牌的过程如下:

0 at Mon Apr 07 13:54:10 CST 2025 get success
1 at Mon Apr 07 13:54:10 CST 2025 get success
2 at Mon Apr 07 13:54:10 CST 2025 get success
3 at Mon Apr 07 13:54:10 CST 2025 get success
4 at Mon Apr 07 13:54:10 CST 2025 get success
5 at Mon Apr 07 13:54:10 CST 2025 get success
6 at Mon Apr 07 13:54:10 CST 2025 get success
7 at Mon Apr 07 13:54:10 CST 2025 get success
8 at Mon Apr 07 13:54:10 CST 2025 get success
9 at Mon Apr 07 13:54:10 CST 2025 get success
10 at Mon Apr 07 13:54:10 CST 2025 get success
11 at Mon Apr 07 13:54:10 CST 2025 get success
12 at Mon Apr 07 13:54:10 CST 2025 get success
13 at Mon Apr 07 13:54:10 CST 2025 get success
14 at Mon Apr 07 13:54:10 CST 2025 get success
15 at Mon Apr 07 13:54:10 CST 2025 get success
16 at Mon Apr 07 13:54:10 CST 2025 get success
17 at Mon Apr 07 13:54:10 CST 2025 get success
18 at Mon Apr 07 13:54:10 CST 2025 get success
19 at Mon Apr 07 13:54:10 CST 2025 get success
20 at Mon Apr 07 13:54:10 CST 2025 get success
21 at Mon Apr 07 13:54:10 CST 2025 get success
22 at Mon Apr 07 13:54:10 CST 2025 get success
23 at Mon Apr 07 13:54:10 CST 2025 get success
24 at Mon Apr 07 13:54:10 CST 2025 get success
25 at Mon Apr 07 13:54:10 CST 2025 get success
26 at Mon Apr 07 13:54:10 CST 2025 get success
27 at Mon Apr 07 13:54:10 CST 2025 get success
28 at Mon Apr 07 13:54:10 CST 2025 get success
29 at Mon Apr 07 13:54:10 CST 2025 get success
30 at Mon Apr 07 13:54:10 CST 2025 get success
31 at Mon Apr 07 13:54:10 CST 2025 get success
32 at Mon Apr 07 13:54:10 CST 2025 get success
33 at Mon Apr 07 13:54:10 CST 2025 get success
34 at Mon Apr 07 13:54:10 CST 2025 get success
35 at Mon Apr 07 13:54:10 CST 2025 get success
36 at Mon Apr 07 13:54:10 CST 2025 get success
37 at Mon Apr 07 13:54:10 CST 2025 get success
38 at Mon Apr 07 13:54:10 CST 2025 get success
39 at Mon Apr 07 13:54:10 CST 2025 get success
40 at Mon Apr 07 13:54:10 CST 2025 get success
41 at Mon Apr 07 13:54:10 CST 2025 get success
42 at Mon Apr 07 13:54:10 CST 2025 get success
43 at Mon Apr 07 13:54:10 CST 2025 get success
44 at Mon Apr 07 13:54:10 CST 2025 get success
45 at Mon Apr 07 13:54:10 CST 2025 get success
46 at Mon Apr 07 13:54:10 CST 2025 get success
47 at Mon Apr 07 13:54:10 CST 2025 get success
48 at Mon Apr 07 13:54:10 CST 2025 get success
49 at Mon Apr 07 13:54:10 CST 2025 get success
50 at Mon Apr 07 13:54:10 CST 2025 get success
51 at Mon Apr 07 13:54:10 CST 2025 get success
52 at Mon Apr 07 13:54:10 CST 2025 get success
53 at Mon Apr 07 13:54:10 CST 2025 get success
54 at Mon Apr 07 13:54:10 CST 2025 get success
55 at Mon Apr 07 13:54:10 CST 2025 get success
56 at Mon Apr 07 13:54:10 CST 2025 get success
57 at Mon Apr 07 13:54:10 CST 2025 get success
58 at Mon Apr 07 13:54:10 CST 2025 get success
59 at Mon Apr 07 13:54:10 CST 2025 get success
60 at Mon Apr 07 13:54:10 CST 2025 get success
61 at Mon Apr 07 13:54:10 CST 2025 get success
62 at Mon Apr 07 13:54:10 CST 2025 get success
63 at Mon Apr 07 13:54:10 CST 2025 get success
64 at Mon Apr 07 13:54:10 CST 2025 get success
65 at Mon Apr 07 13:54:10 CST 2025 get success
66 at Mon Apr 07 13:54:10 CST 2025 get success
67 at Mon Apr 07 13:54:10 CST 2025 get success
68 at Mon Apr 07 13:54:10 CST 2025 get success
69 at Mon Apr 07 13:54:10 CST 2025 get success
70 at Mon Apr 07 13:54:10 CST 2025 get success
71 at Mon Apr 07 13:54:10 CST 2025 get success
72 at Mon Apr 07 13:54:10 CST 2025 get success
73 at Mon Apr 07 13:54:10 CST 2025 get success
74 at Mon Apr 07 13:54:10 CST 2025 get success
75 at Mon Apr 07 13:54:10 CST 2025 get success
76 at Mon Apr 07 13:54:10 CST 2025 get success
77 at Mon Apr 07 13:54:10 CST 2025 get success
78 at Mon Apr 07 13:54:10 CST 2025 get success
79 at Mon Apr 07 13:54:10 CST 2025 get success
80 at Mon Apr 07 13:54:10 CST 2025 get success
81 at Mon Apr 07 13:54:10 CST 2025 get success
82 at Mon Apr 07 13:54:10 CST 2025 get success
83 at Mon Apr 07 13:54:10 CST 2025 get success
84 at Mon Apr 07 13:54:10 CST 2025 get success
85 at Mon Apr 07 13:54:10 CST 2025 get success
86 at Mon Apr 07 13:54:10 CST 2025 get success
87 at Mon Apr 07 13:54:10 CST 2025 get success
88 at Mon Apr 07 13:54:10 CST 2025 get success
89 at Mon Apr 07 13:54:10 CST 2025 get success
90 at Mon Apr 07 13:54:10 CST 2025 get success
91 at Mon Apr 07 13:54:10 CST 2025 get success
92 at Mon Apr 07 13:54:10 CST 2025 get success
93 at Mon Apr 07 13:54:10 CST 2025 get success
94 at Mon Apr 07 13:54:10 CST 2025 get success
95 at Mon Apr 07 13:54:10 CST 2025 get success
96 at Mon Apr 07 13:54:10 CST 2025 get success
97 at Mon Apr 07 13:54:10 CST 2025 get success
98 at Mon Apr 07 13:54:10 CST 2025 get success
99 at Mon Apr 07 13:54:10 CST 2025 get success
100 at Mon Apr 07 13:54:10 CST 2025 get success
101 at Mon Apr 07 13:54:10 CST 2025 get success
102 at Mon Apr 07 13:54:10 CST 2025 get success
103 at Mon Apr 07 13:54:10 CST 2025 get success
104 at Mon Apr 07 13:54:10 CST 2025 get error
105 at Mon Apr 07 13:54:10 CST 2025 get error
106 at Mon Apr 07 13:54:10 CST 2025 get error
107 at Mon Apr 07 13:54:10 CST 2025 get error
108 at Mon Apr 07 13:54:10 CST 2025 get error
109 at Mon Apr 07 13:54:10 CST 2025 get error
110 at Mon Apr 07 13:54:10 CST 2025 get error
111 at Mon Apr 07 13:54:10 CST 2025 get error
112 at Mon Apr 07 13:54:10 CST 2025 get error
113 at Mon Apr 07 13:54:10 CST 2025 get error
114 at Mon Apr 07 13:54:10 CST 2025 get error
115 at Mon Apr 07 13:54:10 CST 2025 get error
116 at Mon Apr 07 13:54:10 CST 2025 get error
117 at Mon Apr 07 13:54:10 CST 2025 get error
118 at Mon Apr 07 13:54:10 CST 2025 get error
119 at Mon Apr 07 13:54:10 CST 2025 get error
120 at Mon Apr 07 13:54:10 CST 2025 get error
121 at Mon Apr 07 13:54:10 CST 2025 get success
122 at Mon Apr 07 13:54:10 CST 2025 get error
123 at Mon Apr 07 13:54:10 CST 2025 get error
124 at Mon Apr 07 13:54:10 CST 2025 get error
125 at Mon Apr 07 13:54:10 CST 2025 get error
126 at Mon Apr 07 13:54:10 CST 2025 get error
127 at Mon Apr 07 13:54:10 CST 2025 get error
128 at Mon Apr 07 13:54:10 CST 2025 get error
129 at Mon Apr 07 13:54:10 CST 2025 get error
130 at Mon Apr 07 13:54:10 CST 2025 get error
131 at Mon Apr 07 13:54:10 CST 2025 get error
132 at Mon Apr 07 13:54:10 CST 2025 get error
133 at Mon Apr 07 13:54:10 CST 2025 get error
134 at Mon Apr 07 13:54:10 CST 2025 get error
135 at Mon Apr 07 13:54:10 CST 2025 get error
136 at Mon Apr 07 13:54:10 CST 2025 get error
137 at Mon Apr 07 13:54:10 CST 2025 get error
138 at Mon Apr 07 13:54:10 CST 2025 get error
139 at Mon Apr 07 13:54:10 CST 2025 get error
140 at Mon Apr 07 13:54:10 CST 2025 get error
141 at Mon Apr 07 13:54:10 CST 2025 get error
142 at Mon Apr 07 13:54:10 CST 2025 get error
143 at Mon Apr 07 13:54:10 CST 2025 get error
144 at Mon Apr 07 13:54:10 CST 2025 get error
145 at Mon Apr 07 13:54:10 CST 2025 get error
146 at Mon Apr 07 13:54:10 CST 2025 get error
147 at Mon Apr 07 13:54:10 CST 2025 get error
148 at Mon Apr 07 13:54:10 CST 2025 get error
149 at Mon Apr 07 13:54:10 CST 2025 get error
150 at Mon Apr 07 13:54:10 CST 2025 get error
151 at Mon Apr 07 13:54:10 CST 2025 get error
152 at Mon Apr 07 13:54:10 CST 2025 get error
153 at Mon Apr 07 13:54:10 CST 2025 get error
154 at Mon Apr 07 13:54:10 CST 2025 get error
155 at Mon Apr 07 13:54:10 CST 2025 get error
156 at Mon Apr 07 13:54:10 CST 2025 get error
157 at Mon Apr 07 13:54:10 CST 2025 get error
158 at Mon Apr 07 13:54:10 CST 2025 get error
159 at Mon Apr 07 13:54:10 CST 2025 get error
160 at Mon Apr 07 13:54:10 CST 2025 get success
161 at Mon Apr 07 13:54:10 CST 2025 get error
162 at Mon Apr 07 13:54:10 CST 2025 get error
163 at Mon Apr 07 13:54:10 CST 2025 get error
164 at Mon Apr 07 13:54:10 CST 2025 get error
165 at Mon Apr 07 13:54:10 CST 2025 get error
166 at Mon Apr 07 13:54:10 CST 2025 get error
167 at Mon Apr 07 13:54:10 CST 2025 get error
168 at Mon Apr 07 13:54:10 CST 2025 get error
169 at Mon Apr 07 13:54:10 CST 2025 get error
170 at Mon Apr 07 13:54:10 CST 2025 get error
171 at Mon Apr 07 13:54:10 CST 2025 get error
172 at Mon Apr 07 13:54:10 CST 2025 get error
173 at Mon Apr 07 13:54:10 CST 2025 get error
174 at Mon Apr 07 13:54:10 CST 2025 get error
175 at Mon Apr 07 13:54:10 CST 2025 get error
176 at Mon Apr 07 13:54:10 CST 2025 get error
177 at Mon Apr 07 13:54:10 CST 2025 get error
178 at Mon Apr 07 13:54:10 CST 2025 get error
179 at Mon Apr 07 13:54:10 CST 2025 get error
180 at Mon Apr 07 13:54:10 CST 2025 get error
181 at Mon Apr 07 13:54:10 CST 2025 get error
182 at Mon Apr 07 13:54:10 CST 2025 get error
183 at Mon Apr 07 13:54:10 CST 2025 get error
184 at Mon Apr 07 13:54:10 CST 2025 get error
185 at Mon Apr 07 13:54:10 CST 2025 get error
186 at Mon Apr 07 13:54:10 CST 2025 get error
187 at Mon Apr 07 13:54:10 CST 2025 get error
188 at Mon Apr 07 13:54:10 CST 2025 get error
189 at Mon Apr 07 13:54:10 CST 2025 get success
190 at Mon Apr 07 13:54:10 CST 2025 get error
191 at Mon Apr 07 13:54:10 CST 2025 get error
192 at Mon Apr 07 13:54:10 CST 2025 get error
193 at Mon Apr 07 13:54:10 CST 2025 get error
194 at Mon Apr 07 13:54:10 CST 2025 get error
195 at Mon Apr 07 13:54:10 CST 2025 get error
196 at Mon Apr 07 13:54:10 CST 2025 get error
197 at Mon Apr 07 13:54:10 CST 2025 get error
198 at Mon Apr 07 13:54:10 CST 2025 get error
199 at Mon Apr 07 13:54:10 CST 2025 get error
total num:107