redis业务请求控制次数

使用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();
		}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章