Java之品優購課程講義_day20(2)
阿新 • • 發佈:2018-11-05
秒殺商品列表的增量更新
每分鐘執行查詢秒殺商品表,將符合條件的記錄並且快取中不存在的秒殺商品存入快取
/** * 重新整理秒殺商品 */ @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("移除秒殺商品任務結束"); }