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);
}


浙公网安备 33010602011771号