zoukankan      html  css  js  c++  java
  • redis实现秒杀demo

    代码

    package com.prosay.redis;
    
    import java.util.List;
    
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.Transaction;
    
    public class SaleRunable implements Runnable{
        String productKey="iphone8";//监视的key 当前秒杀商品的数量  
        Jedis jedis = new Jedis("localhost");
        String userName;
        public SaleRunable(String userName){
            this.userName = userName;
        }
    
        @Override
        public void run(){
            //商品的key  , 秒杀有个数量
            //watch 监视一个key,当事务执行之前这个key发生了改变,事务会被打断
            jedis.watch(productKey);
            String value = jedis.get(productKey);
            int num = Integer.valueOf(value);
            //这次秒杀的商品是100个iphone8 
            if(num<=100&&num>=1){
                //开启事务
                Transaction tx = jedis.multi();
                //减少一个商品数量
                tx.incrBy(productKey, -1);
                //提交事务,如果商品数量发生了改动 则会返回null
                List<Object> list = tx.exec();
                if(list==null || list.size()==0){
                    System.out.println(userName+"商品抢购失败!");
                }else{
                    for(Object success : list){
                        System.out.println(userName+"("+success.toString()+")商品抢购成功,当前抢购成功的人数是:"+(1-(num-100)));
                    }
                }
            }else{
                System.out.println(userName+"商品已经被抢完了");
            }
            jedis.close();
        }
    
    }

    测试

    package com.prosay.redis;
    
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    import redis.clients.jedis.Jedis;
    
    public class TestMs {
    
        public static void main(String[] args) {
            Jedis jedis = new Jedis("localhost");
            jedis.set("iphone8","100");
            jedis.close();
            //玩多线程
            ExecutorService executor = Executors.newFixedThreadPool(20);
    
            for(int i = 0 ; i < 1000; i++){
                executor.execute(new SaleRunable("user"+i));
            }
            executor.shutdown();
    
        }
    
    }

    转自:https://blog.csdn.net/lzh657083979/article/details/77917088

  • 相关阅读:
    Ubuntu14.04安装和配置Tomcat8.0.12
    订单、支付、退款、发货、退货等编号自动生成类
    java实现给图片添加水印
    跳一次涨薪88% 跳槽已成为中国“职场文化”
    五色使人目盲
    CSS样式如何解决IE浏览器不同版本的兼容问题
    MySQL日期时间函数大全
    MySQL DATE_ADD() 函数
    input text框和 checkbox 连带被选中的情况
    jquery easyui from 表单返回乱码!
  • 原文地址:https://www.cnblogs.com/azhqiang/p/9145830.html
Copyright © 2011-2022 走看看