前言
今天主要学习Redis分布式锁以及Redisson和分段锁。
分布式锁
当我们在同一个JVM当中,可以使用synchronized或Lock来进行上锁。但是在多节点的情况下,我们需要使用分布式锁。
Redis分布式锁
setnx命令:当值不存在时才能设置成功
expire过期时间:设置过期时间保证发生异常时候没有正常释放锁的情况。
存在的问题
1.加锁成功,设置过期时间失败
解决:加锁和过期时间一块设置;使用lua脚本
2.解锁成功,把非自己占用的锁解除
解决:使用lua脚本,判断是否为自己的锁再解除
3.锁过期,业务没执行完。
解决:乐观锁;watch dog
Redisson
基于Netty的Redis客户端
加锁原理
解锁原理
WatchDog原理
WatchDog提供一个任务未完成自动续期的功能。
分段锁
当只有一个锁的时候锁住某个商品,想要提高并发量可使用分段锁思想。
总结
今天主要分享分布式锁的部分原理以及思想。