利用redis实现服务调用次数控制

import redis.clients.jedis.Jedis;
import redis.clients.jedis.exceptions.JedisDataException;
/**
 * 业务需求,初级用户在20秒内有10次操作机会,高级用户有20次操作机会
 */

public class JedisService {
    private String id;
    private int num;
    public JedisService(String id,int num){
        this.id=id;
        this.num=num;
    }

    //进行业务判断
    public void  service(){
        Jedis jedis=new Jedis("127.0.0.1",6379);
        String value=jedis.get("uid:"+this.id);
        try{
            //如果不存在则创建
            if(value==null){
                jedis.setex("uid:"+this.id,20,Long.MAX_VALUE-num+"");
            }else{
                //存在则增加
                Long incr = jedis.incr("uid:" + this.id);
                job(this.id,num-(Long.MAX_VALUE-incr));
            }
        }catch (JedisDataException e){
            System.out.println("您的次数已用尽,请升级会员");
        }

    }

    //进行业务操作
    public void job(String id,Long times){
        System.out.println(id+"正在执行第"+times+"次操作");
    }
}
class MyThread extends  Thread{
    JedisService jedisService;
    public MyThread(String id,int num){
       jedisService=new JedisService(id,num);
    }
    public void run(){
        while(true){
            jedisService.service();
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }

}
class  Main{
    public static void main(String[] args) {
        MyThread myThread1=new MyThread("初级用户",10);
        myThread1.start();
        MyThread myThread2=new MyThread("高级用户",20);
        myThread2.start();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值