redis分布式锁培训笔记

 来源:图灵学院培训笔记

 

支持单机,不支持集群分布式

 

jmeter 压测

 

 

 问题:如果宕机,代码没执行下去,锁没释放

 

 

 

如果宕机发生在设置过期时间的时候,改成原子语句

 

 

 

 

假设这个线程执行时间耗时了15s,程序执行中途过了10s,key失效,redis将它删除。

 

 

这时第二个线程来执行,发现没有锁,于是它加锁成功,第一个线程仍在执行,如果比第一个线程先执行完,执行到最后删除 key,删的则是第二个线程加的锁。

我自己设的锁不想让其他人删掉,设置唯一 id 。

 

 

但仍存在问题:线程执行未结束,key已经过期,业务代码还没执行完,其他线程可以执行此段代码,就有可能有bug产生。

锁续命:定时任务定时扫描该线程的锁是否存在,如果还存在就重置过期时间。

 

redisson

  jedis在分布式场景下没redisson功能强大

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

支持重入锁

 

 

如果在主从架构中,key在主节点加锁成功,主节点挂了,而这时候,并没有同步到从节点,其他线程可以在新的主节点加锁,此时可以用zookeeper ,zookeeper是强一致性架构,但zookeeper性能没redis高

 

redlock

不再对一台机器加锁

 

性能不高,并涉及回滚问题。 

 

高并发分布式锁

可以用分段锁的思想

 

 001 号商品库存1000个,可以分段加锁,针对不同库存段位加锁。

 

posted @ 2020-09-22 23:23  Nausicaa0505  阅读(16)  评论(0编辑  收藏  举报