springboot+redis实现分布式锁

参考

SpringBoot实现Redis分布式锁

https://www.jianshu.com/p/750ac97eb29e

实现原理

  • 加锁解锁

    执行逻辑之前,加锁

    执行逻辑之后,删除锁

    加锁和删除锁必须是同一个对象的行为。

  • 获取锁删除锁

    使用setnx,保证只有一个对象可以设置锁成功,只有一个对象可以拿到锁。

    (删除锁的时候,必须保证是自己创建的锁,需要验证value。

    上面参考文章中,每次设置加锁的时候,设置token,删除锁的时候,对比token)

  • 设置过期时间 

    设置锁的过期时间,为什么有删除锁的操作后,还需要设置过期时间?

    因为一旦异常,锁没有删除成功,后面的对象操作就再也获取不了锁了,就是出现死锁。

    (我觉得是不是可以通过每次设置不同的key,来解决问题)

    当然,过期时间设置成多大,又是问题。你的业务得处理多长时间。

    但是,好像如果在你的业务执行完之前,删除你的锁也没有多大的影响。

实现 待续

    

文章收藏

redis(五)-缓存三大问题及解决方案

https://blog.csdn.net/haoxin963/article/details/83245113

原文地址:https://www.cnblogs.com/windy13/p/12637879.html