Redis 模擬秒殺
阿新 • • 發佈:2020-08-28
建立執行緒池,準備好庫存資訊
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(); } }