/**
* 大致流程
* 1.用setnx给我们的key加锁
* 2.在设置过期时间
* 3.加一个唯一id(防止业务处理时间大于过期时间)
* 当查询不到信息显示系统繁忙重新发起请求.
*/
@Override
public void redis() {
//订单id 前端所传参数
String orderId = "54164613154631546";
//每个线程的唯一id
String s = UUID.randomUUID().toString();
try {
//执行命令 setnx() //1.当key不存在的时候,直接赋值存入redis
//2.当key存在的时候,不做任何动作.
Boolean ling = redisTemplate.opsForValue().setIfAbsent(orderId, s);
//设置过期时间
redisTemplate.expire(orderId,10, TimeUnit.SECONDS);
//上面两条命令一起使用
Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent(orderId, s, 10, TimeUnit.SECONDS);
if (!aBoolean){
System.out.println("系统繁忙");
}
/*
//总库存
int stock = (int) redisTemplate.opsForValue().get("stock");
if (stock > 0) {
//剩余库存
int realStock = stock - 1;
redisTemplate.opsForValue().set("stock", realStock);
System.out.println("扣减成功,剩余库存:" + realStock);
} else {
System.out.println("扣减失败,库存不足");
}*/
}finally {
//唯一id限制 防止锁永久失效
Object o = redisTemplate.opsForValue().get(orderId);
if (s.equals(o)){
//解锁,删除锁
redisTemplate.delete(orderId);
}
}
}
redisson包死活导入不了,只能复制了