redis分布式锁的理解

适用场景

多线程的情况下,对一个值进行修改,或者说重复的进行什么操作,保证幂等性 ,或者说不会重复的创建某个值

分布式锁需要实现的目标

1.多线程可见
2.排它性:同一时间只能有一个线程获取锁,redis的setnx 表示set if not exits 就可以实现
3.避免死锁的出现
4.高可用

下面展示一些 内联代码片

redis锁实现的方式

第一种

在进行多线程操作的时候获取锁,在操作完成之后释放锁
比如线程A调用redisTemplate.opsForValue方法设置key+value ,时间 10s
线程B调用redisTemplate.opsForValue方法也去设置锁key+value ,时间 10s
在这种情况下 A执行业务 因为某些业务的原因导致 执行的时间超过了10s 从而使得redis 自动释放了锁 这个10s之后线程B获得了锁之后 也开始执行自己的业务逻辑.,但是刚开始执行线程A执行完成了 执行了业务上的操作删除了 锁 这个锁却不是A自己的,而是线程B获得的分布式锁 也就意味者在线程B执行业务逻辑的时候 线程C也能获取到锁 从而违反了redis分布式锁的排他性

第二种

优化:我们在设置分布式锁的时候,将当前线程的信息作为自己的锁 解锁的时候 去判断我们删除的锁是不是自己线程的锁 这样就能解决线程解锁,解除别的锁的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值