传入:用户电话即可。
实现功能:
查询是否有预约:
Redis查询,若有则可以秒杀,若没有,则去数据库查询,若有预约,则把信息加入Redis。若没有,则返还没有预约信息。
查询商品是否已经加入redis:
如果没有,则直接加入,如时间,库存等。
在redis查询是否还有库存:
有则抢购成功,扣库存,用redis充当消息队列插入用户秒杀记录,秒杀结束再同步处理(后台线程异步处理或者开线程池处理)。没有库存则返回错误信息。
代码实现:
1. public SecKillResult secKillProduct(String userPhone, long productId) {
2. String state = (String)redisTemplate.opsForValue().get(userPhone + "_"+ productId);
3. //用户信息加载
4. if(null == state){
5. SuccessKilled successKilled = new SuccessKilled();
6. successKilled.setSeckillId(productId);
7. successKilled.setUserPhone(Long.valueOf(userPhone));
8. successKilled = successKilledMapper.selectOne(successKilled);
9. if(null == successKilled){
10. return new SecKillResult(false, "该用户没有预约");
11. }else{
12. synchronized (this){
13. state = (String)redisTemplate.opsF