springboot+redis实现分布式锁

Posted 我的名字是Sheldon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot+redis实现分布式锁相关的知识,希望对你有一定的参考价值。

参考

SpringBoot实现Redis分布式锁

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

 

实现原理

  • 加锁解锁

    执行逻辑之前,加锁

    执行逻辑之后,删除锁

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

  • 获取锁删除锁

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

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

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

  • 设置过期时间 

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

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

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

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

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

 

实现 待续

    

 

文章收藏

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

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

 

以上是关于springboot+redis实现分布式锁的主要内容,如果未能解决你的问题,请参考以下文章

springboot 中单机 redis 实现分布式锁

Redis 系列 -- SpringBoot中 基于 Redis 实现分布式锁

ChatGPT 用redis实现分布式锁

Springboot使用redis的setnx和getset实现并发锁、分布式锁

Springboot基于Redisson实现Redis分布式可重入锁案例到源码分析

SpringBoot电商项目实战 — Redis实现分布式锁