1.创建分布式锁
由于Redis是单线程模型,命令操作原子性,所以利用这个特性可以很容易的实现分布式锁。
//创建分布式锁
public boolean lockOn(String creditId) {
BoundValueOperations<String, String> ops = redisTemplate.boundValueOps(KEY + creditId);
//只有当前操作员设置成功,才允许其操作
//setIfAbsent 不存在key则添加key将value值设置为1
if (ops.setIfAbsent("1")) {
//设置过期时间会到时删除key
ops.expire(1, TimeUnit.MINUTES);
return true;
} else {
//存在key则返回false
return false;
}
}
//删除分布式锁
public void releaseOnRepayment(String creditId) {
redisTemplate.delete(creditId);
}
ps:
image.png
2.使用锁
if (operationLockBiz.lockOnRepayment(creditId)) {
try{
//用完需要将锁删除
finally {
operationLockBiz.releaseOnRepayment(creditId);
}
网友评论