首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Redis分布式锁的实现方式

Redis分布式锁的实现方式

原创
作者头像
用户6510625
修改于 2019-10-21 06:34:03
修改于 2019-10-21 06:34:03
5180
举报
文章被收录于专栏:成长之路成长之路

1.实现分布式锁一般具有三种形式:

1.1 数据库的乐观锁

1.2 redis的分布式锁

1.3 zookeeper的分布式锁

2.对于redis分布式锁需要满足的条件共有4点;

2.1 互斥性,任意时刻只有一个人拥有锁

2.2 不会发生死锁,那就是当一个人持有锁之后,因为系统崩溃,而未释放锁,那么就需要释放锁

2.3 具有容错性,当一个redis节点挂掉之后,程序正常工作;

2.4 加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给释放了;

3.代码实现;

3.1 使用Maven引入jedis的依赖,选择2.9的版本,这样的API比较全;

3.2 使用Jedis的set方法

jedis.set(Lockkey, requestId,"NX","PX" , timeout)

lockkey表示为锁,也就是redis中的唯一key,

requestId表示为:标识该锁是哪个客户端加锁的;

NX:set if not exist

PX:表示是有过期时间的

timeout :表示过期时间;

3.3 注意点:

加锁和设置过期时间,必须是一步完成的,也就是原子性;如果不是原子性,先加锁,然后系统崩溃,那么该锁没有过期时间,就成了死锁;

requestId是为了该锁只能由该客户端进行解锁;

解锁过程:

参考 微信公众号 石杉的架构笔记 中的 Redis分布式锁的正确实现方式

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档