1. 程式人生 > >Java之品優購課程講義_day20(2)

Java之品優購課程講義_day20(2)

秒殺商品列表的增量更新
每分鐘執行查詢秒殺商品表,將符合條件的記錄並且快取中不存在的秒殺商品存入快取

/**
  * 重新整理秒殺商品 
  */
 @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()+"條商品裝入快取"); 
 }

過期秒殺商品的移除
每秒中在快取的秒殺上皮列表中查詢過期的商品,發現過期同步到資料庫,並在快取中移除 該秒殺商品

/**
  * 移除秒殺商品 
  */
 @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("移除秒殺商品任務結束");   
 }