提问:redis分布式锁是怎么实现的?
回答:redisson中分布式锁主要利用了setnx命令(set if not exists)和lua脚本(加锁、设置过期时间等)。获取锁执行成功则执行业务,完成后释放锁,获取失败则不执行业务。
提问:redis实现分布式锁如何合理控制锁的有效时长?
回答:在redisson的分布式锁中,提供一个看门狗(Watch Dog),一个线程获取锁成功后,Watch Dog会给持有的线程续期(默认是每隔10秒续期一次)。
提问:redisson这个锁可以重入吗?
回答:可以重入,多个锁重入需要判断是否是当前线程,在redis中进行存储的时候使用hash结构,来存储线程信息和重入次数。
提问:redisson锁能解决主从数据一致的问题吗?
回答:不能解决,但是可以使用redisson提供的红锁(在多个redis实例上创建锁)来解决,但是这样的话性能就太低了。如果业务中需要保证数据的强一致性,建议采用zookeeper实现分布式锁。