Redis 模拟秒杀

创建线程池,准备好库存信息


public class Applicaiton {
    public static ThreadPoolExecutor pool = new ThreadPoolExecutor(
            10,
            100,
            10,
            TimeUnit.SECONDS,new LinkedBlockingDeque<Runnable>()
    );
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);
        //jedis.auth()
        jedis.select(1); // 选择库1
        jedis.set("kill_num","50");
        jedis.del("kill_list");
        jedis.close();
        for(int i=0; i < 1000; i++) {
            pool.execute(new KillTask()); // 创建秒杀线程
        }
    }
}



创建线程任务类,实现秒杀商品任务线程


public class KillTask implements Runnable {

    @Override
    public void run() {
        Jedis jedis = new Jedis("localhost", 6379);
        jedis.select(1); // 选择库1
        jedis.watch("kill_num","kill_list");
        int num = Integer.parseInt(jedis.get("kill_num"));


        if(num >  0) {
            Transaction transaction = jedis.multi(); // 开启事务
            transaction.decr("kill_num");
            transaction.rpush("kill_list","9483");
            transaction.exec(); // 关闭事务
        } else {
            Applicaiton.pool.shutdown();
        }
        jedis.close();
    }
}


原文地址:https://www.cnblogs.com/lixyuan/p/13579918.html