lua脚本秒杀设计




if redis.call('sismember',KEYS[1]..KEYS[2],1)==1 //如果用户已经购买过该商品 then return -1; //已经购买过了 else //可以购买 if redis.call('lpop',KEYS[2])=='nil' //移除商品列表第一个元素并返回 then return -2;//没有库存了 else if redis.call('sadd',KEYS[1]..KEYS[2],1) ==1 //添加用户对应的购买记录 then return KEYS[1]..KEYS[2]; //如果添加购买记录成功 返回 用户id 和商品id else return -3;// 添加购买记录失败 end end end

以上代码是描述过程

 

创建库存使用Collection

   @Scheduled(fixedRate=1000000)
    public void dbSynRedis(){
        System.out.println("执行任务");
        List<Seckill> seckills = seckillMapper.querySeckillList();
        createStock(seckills);//创建库存
        System.out.println("库存创建成功");

    }

 

    public void createStock( List<Seckill> list){
        if(null!=list&&list.size()>0){

            for (Seckill item :list) {
                Collection stock=new ArrayList();

                for (int i=0;i<item.getStockCount();i++){
                    stock.add(1);
                 }
                 redisUtil.rPushAll(item.getGoodsName()+item.getId(),stock);
            }
        }
    }

 

//从列表左侧添加一个元素
	public void rPushAll(String key, Collection stock){

	 	redisTemplate.opsForList().rightPushAll(key, stock);
	}

 

 

 

 

posted @ 2023-03-17 19:10  郎小乐  阅读(44)  评论(0)    收藏  举报