redis_02_分布式锁
单机锁:线程A操作互斥资源X时,线程B不可以操作。互斥资源的并行改成串行。 具体实现有:lock、synchronized等。 在服务分布式情况下,单机锁只能在当前机器上有效,比如一个订单服务有3台机器,这时候单机锁无法解决互斥资源的并发操作。需要引入分布式锁。比如redis。
二、如何实现锁
1、锁的场景/需求
场景: 当线程A抢占到互斥资源时,标记已抢占,线程B看到标记是已抢占则无法抢占,失败或排队,看到标记是未抢占则可以抢占 需求: 1、多线程执行互斥代码情况下,确保有且仅有一个线程能抢占互斥代码执行权限。 2、抢不到,予以失败或排队。
2、单机锁的实现原理
通过volatile修饰的lock锁的标记state字段(volatile解决可见性问题)再通过cas方式解决抢占的并发问题
3、redis分布式锁实现原理
1)标记,通过redis独有的key-value结构
当线程抢占到执行权限时,则设置key。
2)标记可见性,redis单线程命令
3)保证原子性,如:setnx
4、保证redis多指令的原子性
1)、事务
事务的特点以及场景: 命令是原子的 在执行事务中的指令时,服务器阻塞,不能执行其他指 令 不能拿到事务中间的指令的结果 来决定后面指令的逻辑。
2)、lua
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果