使用jedis實現不同等級在一定時間內請求次數控制。
package jedis;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.exceptions.JedisDataException;
public class Demo {
private String level;
private int num;
public Demo(String level,int num) {
this.level=level;
this.num=num;
}
public void work(String level,long num) {
System.out.println("等級:"+level+",業務操作執行第"+num+"次");
}
public void service() {
Jedis jedis = new Jedis("127.0.0.1",6379);
String value = jedis.get("level:"+level);
try {
if (value==null) {
jedis.setex("level:"+level,20,Long.MAX_VALUE-num+"");
}else {
long val = jedis.incr("level:"+level);
work(level, num-(Long.MAX_VALUE-val));
}
} catch (JedisDataException e) {
System.out.println("使用超限,請升級或等待!");
}finally {
jedis.close();
}
}
}
class MyTheard extends Thread{
Demo demo;
public MyTheard(String level,int num) {
demo=new Demo(level, num);
}
public void run() {
while (true) {
try {
demo.service();
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
主程序:
public class JedisTest {
public static void main(String[] args) {
MyTheard m1=new MyTheard("初級",10);
MyTheard m2=new MyTheard("高級",30);
m1.start();
m2.start();
}
}