@RestController
public class RedisLock {
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private StringRedisTemplate stringRedisTemplate;
private Redisson redisson;
// @GetMapping("/deduct-prod")
// public void test(){
// synchronized (this){
// int stock = Integer.parseInt(stringRedisTemplate.opsForValue().get("stock"));
// if(stock>0){
// int realstock = stock -1;
// stringRedisTemplate.opsForValue().set("stock",realstock+"");
// System.out.println("秒杀成功,库存剩余"+stock);
// }else{
// System.out.println("秒杀失败,商品库存不足");
// }
// }
// }
// @GetMapping("/deduct-prod")
// public void test(){
// try{
Boolean locallock = stringRedisTemplate.opsForValue().setIfAbsent("locallock", "123");
// Boolean locallock = stringRedisTemplate.opsForValue().setIfAbsent("locallock", "123",10,TimeUnit.SECONDS);
// if(locallock){
// int stock = Integer.parseInt(stringRedisTemplate.opsForValue().get("stock"));
// if(stock>0){
// int realstock = stock -1;
// stringRedisTemplate.opsForValue().set("stock",realstock+"");
// System.out.println("秒杀成功,库存剩余"+stock);
// }else{
// System.out.println("秒杀失败,商品库存不足");
// }
// }else{
// System.out.println("未抢到,请重试");
// }
//
// }finally {
// stringRedisTemplate.delete("locallock");
// }
// }
@GetMapping("/deduct-prod")
public void test(){
RLock lock = redisson.getLock("aaa");
try{
lock.lock(30, TimeUnit.SECONDS);
int stock = Integer.parseInt(stringRedisTemplate.opsForValue().get("stock"));
if(stock>0){
int realstock = stock -1;
stringRedisTemplate.opsForValue().set("stock",realstock+"");
System.out.println("秒杀成功,库存剩余"+stock);
}else{
System.out.println("秒杀失败,商品库存不足");
}
}finally {
lock.unlock();
}
}
}
Java锁-分布式锁
于 2023-05-07 23:02:21 首次发布