1.redis实现分布式锁思路
首先,我们来看一段问题比较明显的代码。
/**
* 存在并发问题
* @param productId
* @return
*/
private String reduceStock1(String productId) {
Integer stock = Integer.parseInt(redisTemplate.opsForValue().get(productId));
if(stock>0){
int realStock = stock -1;
redisTemplate.opsForValue().set(productId,realStock+"");
System.out.println("扣减成功,剩余库存"+realStock);
}else {
System.out.println("扣减失败,库存不足");
}
return "";
}
对于临界资源库存,我们明显有着并发问题,对于集群来说单体锁synchronized或者reentrantLock均不合适。
目前对于分布式锁来说有两种比较流行的解决办法,一种是利用redis,另一种是用zk,我们使用redis来看一下怎么实现。
- version 1
本文介绍了Redis实现分布式锁的思路,从最初的简单版本到加入超时和续命机制,逐步完善。同时深入解析了Redission分布式锁的实现,包括lua脚本确保原子性,锁续命的递归调用策略以及无法上锁时的处理机制,如使用Redis的channel进行通知。
最低0.47元/天 解锁文章
1425

被折叠的 条评论
为什么被折叠?



