美文网首页方案
基于redis简单的分布式锁实现思路

基于redis简单的分布式锁实现思路

作者: 许忠钰的博客 | 来源:发表于2021-06-21 08:56 被阅读0次

基于分布式系统,Java提供的内置锁(synchronized和AQS Lock)无法满足在分布式环境下保证线程的原子性一致性持久性
使用Redis Spring数据结构基于原子性的设计可以实现其分布式锁
其思路为:

第一步
通过RedisTemplate接口向Redis中新增我们的锁数据(参数:锁名,线程ID,超时自动过期时间,单位)

第二步
判断该线程是否是新增锁数据的线程(判断redis中是否存有锁名的数据),即判断该线程是否拿到锁,如果是就执行业务逻辑,如果没有拿到锁那么处于等待状态,直到该锁被释放

第三步
程序执行完成,执行释放锁的代码(delete),允许其他线程争抢拿锁执行

说明:
应保证添加锁数据时原子性
应保证是对应的线程释放对应的锁(加入线程ID参数的原因,防止出现锁失效)
锁的自动失效时间不易过长也不易过短

简单代码如下:

问题:
无法保证线程在锁失效时间前执行完毕 会出现bug
解决方案:锁续命

比较成熟的锁框架推荐
redisson

基于redis 原子性 即lua脚本实现

相关文章

网友评论

    本文标题:基于redis简单的分布式锁实现思路

    本文链接:https://www.haomeiwen.com/subject/abksyltx.html