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

 

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