做过电商的人肯定会用到秒杀场景,本人想到了一个很简单的方式实现,不用加锁和数据库,实现十分简单,就是使用redis 的incr,incr 在达到LONG的最大值时会报错。
@RestController
public class SeckillController {
@Autowired
private RedisTemplate redisTemplate;
@GetMapping("/seckill/count")
public Long seckillCounmt(){
//Long.MAX_VALUE - 100 假设库存时100
Long incr = redisTemplate.opsForValue().increment("incr",Long.MAX_VALUE - 100 );
return incr;
}
@GetMapping("/seckill")
public String seckill(){
try {
Long incr = redisTemplate.opsForValue().increment("incr" );
return incr + "";
} catch (Exception e) {
return "没有了";
}
}
}
该方法也可以用于生成连续的id
Long id = redisTemplate.opsForValue().increment("id" );
欢迎留言讨论