Java+RedisTemplate 实现redis分布式锁

 

api demo:

set("key","value",30, TimeUnit.SECONDS);

redisTemplate demo:

redisTemplate.opsForValue().setIfAbsent("onlykey","value",10, TimeUnit.SECONDS);

 

redis分布式锁大致实现原理分析:

主要依托了它的key不存在才能set成功的特性,线程A拿到锁,在没有删除锁的Key时,线程B获取锁就失败了。

 

使用redisTemplate setIfAbsent实现分布式锁大致原理:

setIfAbsent的特性是key不存在才能set成功,并会返回boolean结果,这种原子性特性刚好可以用来实现分布式锁。

 

业务场景:限制用户频繁请求,默认在分布式场景下同一个方法在不允许并发执行(用户疯狂点击没有限制的按钮等)

Java伪代码逻辑

//1.设置对用户维度的唯一值,作为key

String key = “synRedisKey:”+onlyValue;

//2.对锁进行判断

if(!redisTemplate.opsForValue().setIfAbsent("onlykey","value",3, TimeUnit.SECONDS)){

//锁存在

return "操作太频繁啦";

}

//3.业务逻辑....end

//4.删除(释放)锁

redisTemplate.delete(key);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值