redis模拟抢红包并发

xiaoxiao2025-08-03  25

public static void main(String[] args) { //循环测试 for (int i = 0; i <10; i++){ checkConcurrentCift(); } } //用于计算并发红包挣抢后的累计金额,验证是否存在并发多读数据 static AtomicInteger p = new AtomicInteger(0); //测试红包并发 public static void checkConcurrentCift(){ RedisCacheCustomer instance = RedisCacheCustomer.getInstance(); Jedis jedis = instance.getJedisSelectDb(1); for(int j = 0; j < 100; j++) { jedis.lpush("test-list:gift", 1 + ""); } instance.closeJedis(jedis); System.out.println("模拟红包数据存储完毕"); //模拟多线程抢红包 ThreadPoolExecutor tp = new ThreadPoolExecutor(100, 100, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(20000)); //105个线程并发争抢红包 for (int i = 0; i < 105; i++) { tp.execute(new Runnable() { @Override public void run() { RedisCacheCustomer instance = RedisCacheCustomer.getInstance(); Jedis jedis = instance.getJedisSelectDb(1); String rpoplpush = jedis.rpoplpush("test-list:gift", "test-list:all"); if(rpoplpush == null){ System.out.println("未抢到啊!!"); return; } p.addAndGet(Integer.valueOf(rpoplpush)); //System.out.println(Thread.currentThread().getName()+"领取红包-"+rpoplpush); instance.closeJedis(jedis); } }); } tp.shutdown(); //检测线程池是不是都执行完成 try { tp.awaitTermination(1, TimeUnit.DAYS); System.out.println("领取完毕"); Long del = jedis.del("test-list"); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(p); } }

 

转载请注明原文地址: https://www.6miu.com/read-5034216.html

最新回复(0)