redis开始事物,秒杀demo

1.main

package redis;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import redis.clients.jedis.Jedis;

public class test1 {
	public static void main(String[] args) {
		Jedis jedis = new Jedis("127.0.0.1");	
		jedis.set("iphoneX", "1000");	
		jedis.close();
		ExecutorService executor = Executors.newFixedThreadPool(1050);
		
		for(int i=0;i<20000;i++){
			executor.execute(new threadtest("user"+i));
		}
		executor.shutdown();		
	}
}

2.newRunnable

package redis;

import java.util.List;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;

public class threadtest implements Runnable {
	String productKey="iphoneX";
	String user;
	Jedis jedis = new Jedis("127.0.0.1");
	
	public threadtest(String user) {
		this.user=user;
	}

	public void run() {
		
		jedis.watch("iphoneX");
		String number = jedis.get("iphoneX");
		int num = Integer.valueOf(number);
		if(num >0 &&num<=1000){
			Transaction tx = jedis.multi();
			tx.incrBy(productKey,-1);
			List<Object> list = tx.exec();
			if(list==null || list.size()==0){
				System.out.println(user+"抢购失败");
            }else{
            	for(Object success :list){
            		System.out.println(user+"---("+success+")抢购成功");		 
            	}
            }
			
		}else{
			System.out.println(user+"被抢空了");
		}
		jedis.close();
	}

}

  

今日事今日毕
原文地址:https://www.cnblogs.com/gjack/p/8848387.html