A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

秒杀商品列表的增量更新
每分钟执行查询秒杀商品表,将符合条件的记录并且缓存中不存在的秒杀商品存入缓存
[AppleScript] 纯文本查看 复制代码
/** 
  * 刷新秒杀商品 
  */ 
 @Scheduled(cron="0 * * * * ?") 
 public void refreshSeckillGoods(){ 
  System.out.println("执行了任务调度"+new Date());    
  //查询所有的秒杀商品键集合 
  List ids = new ArrayList( redisTemplate.boundHashOps("seckillGoods").keys()); 
  //查询正在秒杀的商品列表   
  TbSeckillGoodsExample example=new TbSeckillGoodsExample(); 
  Criteria criteria = example.createCriteria(); 
  criteria.andStatusEqualTo("1");//审核通过 
  criteria.andStockCountGreaterThan(0);//剩余库存大于 0 
  criteria.andStartTimeLessThanOrEqualTo(new Date());//开始时间小于等于当前时间 
  criteria.andEndTimeGreaterThan(new Date());//结束时间大于当前时间   
  criteria.andIdNotIn(ids);//排除缓存中已经有的商品    
  List<TbSeckillGoods> seckillGoodsList= 
seckillGoodsMapper.selectByExample(example);   
//装入缓存  
  for( TbSeckillGoods seckill:seckillGoodsList ){ 
   redisTemplate.boundHashOps("seckillGoods").put(seckill.getId(), 
seckill); 
  } 
  System.out.println("将"+seckillGoodsList.size()+"条商品装入缓存"); 
 } 

过期秒杀商品的移除
每秒中在缓存的秒杀上皮列表中查询过期的商品,发现过期同步到数据库,并在缓存中移除 该秒杀商品
[AppleScript] 纯文本查看 复制代码
/** 
  * 移除秒杀商品 
  */ 
 @Scheduled(cron="* * * * * ?") 
 public void removeSeckillGoods(){ 
  System.out.println("移除秒杀商品任务在执行"); 
  //扫描缓存中秒杀商品列表,发现过期的移除 
  List<TbSeckillGoods> seckillGoodsList = 
redisTemplate.boundHashOps("seckillGoods").values(); 
  for( TbSeckillGoods seckill:seckillGoodsList ){ 
   if(seckill.getEndTime().getTime()<new Date().getTime()  ){//如果结束日期
小于当前日期,则表示过期 
    seckillGoodsMapper.updateByPrimaryKey(seckill);//向数据库保存记录 
 redisTemplate.boundHashOps("seckillGoods").delete(seckill.getId());//移除缓存数
据 
    System.out.println("移除秒杀商品"+seckill.getId()); 
   }    
  } 
  System.out.println("移除秒杀商品任务结束");   
 } 



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马