因为 get 和 set 操作不是原子操作,你先要做操作 get,然后在操作 set,这个过程中就会导致当第一台服务在执行 get 时,发现 key 不存在,然后进行 set,这个时候 set 可能还没有完成,第二台服务执行了 get,发现 key 不存在,然后进行 set,这个时候就会导致多个服务同时执行,这就不是原子操作了。
我们在使用redis做分布式锁的时候,我们为了保证redis的高可用,通常都会做redis的哨兵模式或者主从集群模式,这时如果在某个master节点上创建锁成功,但是还没有来得及同步到slave节点,master就 宕机了,这时候,锁就丢失了。
溪云阁:专注编程教学,架构,JAVA,Python,微服务,机器学习等领域,欢迎关注,一起学习。一直很想做一篇Redission的文章来,面试中经常会被问到的问题,左等右等今天有时间来处理这个事,这章分3部分,原理介绍,源码深入,项目实战。
redis分布式锁无法自动续期,比如,一个锁设置了1分钟超时释放,如果拿到这个锁的线程在一分钟内没有执行完毕,那么这个锁就会被其他线程拿到,可能会导致严重的线上问题,我已经在秒杀系统故障排查文章中,看到好多因为这个缺陷导致的超卖了。
推荐学习1:肝了30天,整出这份[分布式宝典:限流+缓存+通讯],秋招跳槽有望2:全网首发!马士兵内部共享—1658页《Java面试突击核心讲》一、什么是分布式锁:1、什么是分布式锁:分布式锁,即分布式系统中的锁。